1

我在很多地方都看到过这样的代码,这有什么好处吗..或者这是一种错误的做法..

try
{
    ......
}   
catch (NullReferenceException ex)
{
    Data.LogError(ex, "Exception occourred while ...");
}
catch (IndexOutOfRangeException ex)
{
    Data.LogError(ex, "Exception occourred while ...");
}
catch (Exception ex)
{
    Data.LogError(ex, "Exception occourred while ...");
}

特定异常处理的上下文中。

4

3 回答 3

4

如果您打算在 catch 块中以不同的方式处理异常(即由于抛出异常而执行不同的操作),那么会有好处。

否则,您可以删除更具体的异常处理程序,而只使用最通用的:

catch(Exception ex)

注意:如果异常仅用于日志记录,那么有时重新抛出异常以将其冒泡到应用程序的其余部分会很有用:

try{

}
catch(Exception ex){
   // Log exception here
   throw;
}
于 2013-05-30T09:58:59.430 回答
2

这甚至比泛型更好catch,因为您可以选择如何处理某种类型的异常。比如说,如果文件不存在,您想显示一条消息,并提出重试,否则终止应用程序。

您还可以以不同的方式处理异常,因为它们提供不同的属性(感谢 Rots 指出):

try
{
}
catch(FileNotFoundException ex)
{
    Console.WriteLine(ex.FileName + " not found");
    //Retry
}
catch(Exception ex) // Exception does not contain ex.FileName
{
    //Save stuff
    //Exit
}

只有第一个匹配的块将被执行。

于 2013-05-30T10:00:05.900 回答
0

如果您想以自己的方式处理/记录任何特定异常,则给定的方法是最好的。此外,理想情况下,您可以向用户提供比提供通用消息更贴切的详细信息。现在,如果您不想处理不同的异常,那么您可以继续使用一个 catch 块,它可以捕获所有异常。

于 2013-05-30T10:05:16.023 回答