捕捉异常C#

时间:2010-10-18 14:41:13

标签: c# exception

什么是正确的方法。

捕捉从大多数特定到最普遍或相反的异常。

如果我写

try
{
...
}
catch( Exception e )
{
...
}
catch( NullReferenceException nre )
{
...
}

NullReferenceException是否会被捕获?

9 个答案:

答案 0 :(得分:14)

try
{
...
}
catch( NullReferenceException nre )
{
...
}
catch( Exception e )
{
...
}

此外,我不会捕获NullReferenceException,我会测试我尝试访问的值在实际访问它之前是否为空,或者使用null coalescing operator (??)确保此异常永远不会发生。

应该避免捕捉将军Exception。恕我直言,你应该只在一些全局异常处理程序中执行此操作,因为每次调用方法时很少处理所有可能异常的情况。在这种情况下,您应该只捕获一些特定的例外情况,并采取适当的行动。

答案 1 :(得分:2)

不,你必须从最具体到最普通的。您的示例必须看起来像

try
{

}
catch(NullReferenceException nre)
{

}
catch(Exception e)
{

}

请参阅here (MSDN)

答案 2 :(得分:1)

不,不会。

按顺序放置它。将最具体的例外放在顶部,将一般放在最底层。

http://msdn.microsoft.com/en-us/library/0yd65esw.aspx

答案 3 :(得分:1)

没有。您应该从最具体的一般情况中捕获异常。

答案 4 :(得分:1)

大多数派生到较少派生的

答案 5 :(得分:1)

  

try块可以抛出多个异常,可以通过使用多个catch块来处理。请记住,更专业的catch块应该在广义块之前出现。否则编译器将显示编译错误。

Source

答案 6 :(得分:0)

最具体的第一个

  

NullReferenceException是否会被捕获?

<击>真

不,它不会被抓住

答案 7 :(得分:0)

为了被抓住,NullReferenceException将成为捕获列表中的第一个。

try {
    ...
} catch (NullReferenceException ex) {
    ....
} catch (Exception ex) {
    ...
}

这指定您希望以特定方式处理NullReferenceException,您有特定的事情要做。然后,让其他类型的异常通过最通用的捕获。另一方面,应该避免非特定的异常处理,因为这篇MSDN文章建议:Exception Handling

此外,最好在尝试访问它之前验证要访问的对象是否为null(在Visual Basic中为Nothing),而不是让代码访问该对象并在它为null时抛出此异常。以下是此问题的有用链接:Exception Handling Best Practices in .NET

答案 8 :(得分:0)

当然,从最具体到一般。

try {
   ...
} catch (IOException ex) {
  ....
} catch (Exception ex) {
   ...
}