我在很多地方见过这样的代码,这有什么好处......或者这是错误的做法..
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 ...");
}
在特定异常处理的背景下。
答案 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块进行前瞻,捕获所有异常。