什么是正确的方法。
捕捉从大多数特定到最普遍或相反的异常。
如果我写
try
{
...
}
catch( Exception e )
{
...
}
catch( NullReferenceException nre )
{
...
}
NullReferenceException是否会被捕获?
答案 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)
答案 3 :(得分:1)
没有。您应该从最具体的一般情况中捕获异常。
答案 4 :(得分:1)
大多数派生到较少派生的
答案 5 :(得分:1)
try块可以抛出多个异常,可以通过使用多个catch块来处理。请记住,更专业的catch块应该在广义块之前出现。否则编译器将显示编译错误。
答案 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) {
...
}