当前位置:  开发笔记 > 编程语言 > 正文

C#Nested Try Catch语句或方法?

如何解决《C#NestedTryCatch语句或方法?》经验,为你挑选了3个好方法。

简单的最佳实践问题.

你应该嵌套try catch语句还是只使用方法.

例如,如果您有一个打开文件的方法可以正常工作并关闭文件,那么您可以在try catch外部打开和关闭,或者在finally块中关闭.

现在,如果你的open方法失败了,那么该方法会断言吗?那么你应该在try catch块中包装它还是应该从另一个方法中调用它,而另一个方法又是一个try catch块?



1> cgreeno..:

在打开文件的方法的上下文中,我将使用using语句与try catch.using语句确保在发生异常时调用Dispose.

using (FileStream fs = new FileStream(file, FileMode.Open))
{
    //do stuff
}

做同样的事情:

FileStream fs;
try
{
     fs = new FileStream(file, FileMode.Open);
     //do Stuff
 }
 finally
 {
        if(fs!=null)
           fs.Dispose();
 }


关闭,但try/finally代码与使用代码不完全匹配.您还需要将其包装在匿名范围块中.

2> Charlie Flow..:

既然我们有lambdas和类型推断以及其他一些东西,那么在其他语言中有一个常用的习惯用法现在在C#中很有意义.您的示例是关于打开文件,对其执行某些操作,然后关闭它.那么,现在,你可以创建一个打开文件的辅助方法,并且还要确保关闭/处理/清理,但是调用你为"do stuff"部分提供的lambda.这将帮助您在一个地方获得复杂的try/catch/finally dispose/cleanup,然后一遍又一遍地使用它.

这是一个例子:

public static void ProcessFile(string filePath, Action fileProcessor)
{
  File openFile = null;

  try
  {
    openFile = File.Open(filePath); // I'm making this up ... point is you are acquiring a resource that needs to be cleaned up after.

    fileProcessor(openFile); 
  }
  finally
  {
    openFile.Close(); // Or dispose, or whatever.
  }
}

现在,此方法的调用者不必担心如何打开文件或关闭/处置它.他们可以这样做:

Helpers.ProcessFile("C://somefile.txt", f => 
 {
   while(var text = f.ReadLine())
   {
     Console.WriteLine(text);
   }
 });



3> JaredPar..:

这是一个样式问题,但对我来说,我尝试在单个方法中永远不会有多个try/catch/finally嵌套级别.在您进行嵌套尝试时,您几乎肯定违反了1 function = 1操作主体,并且应该使用第二种方法.


我认为,在很多人中,如果不是大多数开发人员,那将不是风格问题.这将是一个不理解.NET中的异常,并认为他们需要捕获每个异常的问题,就像在Java中一样.在大多数情况下,最好只是让异常传播.
推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有