可以处理这样的特定异常

时间:2013-05-30 09:56:25

标签: c# asp.net exception-handling

我在很多地方见过这样的代码,这有什么好处......或者这是错误的做法..

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 ...");
}

特定异常处理的背景下。

3 个答案:

答案 0 :(得分:4)

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

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

catch(Exception ex)

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

try{

}
catch(Exception ex){
   // Log exception here
   throw;
}

答案 1 :(得分: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
}

只会执行第一个匹配的块。

答案 2 :(得分:0)

如果你想以自己的方式处理/记录任何特定的异常,那么给定的方法是最好的。此外,理想情况下,您可以通过更多适当的详细信息通知用户,而不是通用消息。现在,如果您不想处理不同的异常,那么您可以使用一个catch块进行前瞻,捕获所有异常。