35

如果 catch 和 finally 块都抛出异常会发生什么?

4

5 回答 5

32

finally块抛出异常时,它将有效地隐藏从块中抛出的异常,catch并将成为最终抛出的异常。因此,重要的是在捕获时记录异常,或者确保 finally 块本身不会抛出异常,否则您可能会抛出被扼杀且从未见过的异常​​。

于 2009-09-26T23:32:50.167 回答
6

当 catch 抛出异常时, finally 块将被运行,然后异常退出。如果 finally 块抛出异常,则该块将退出并出现异常。

于 2009-09-26T23:26:29.430 回答
4

最后抛出的异常被抛出。

于 2009-09-26T23:25:45.050 回答
4

它已经被 adrianbanks 很好地回答了,但是下面的帖子应该很有趣: 有趣的异常结果:从 finally 块中抛出异常

于 2009-09-26T23:34:29.400 回答
-4

嗨 Nwaman 我认为你的回答是错误的

try
{
    string s = "hu";
    int i = int.Parse(s);
}
catch (Exception ex)
{
    string s = "hu";
    int i = int.Parse(s);
    throw new Exception();
}
finally
{
    MessageBox.Show("hi");
}

这不会导致最终执行,

于 2012-10-22T09:36:50.583 回答