来自official document about the exception handling:
在执行
catch
块之前,运行时将检查finally
块。
我感觉作者想说:“ finally
块在catch
块之前执行”。
但是此代码却相反:
try
{
throw new Exception();
}
catch (Exception e)
{
Console.WriteLine("In the catch block.");
}
finally
{
Console.WriteLine("In the finally block.");
}
// Output:
// In the catch block.
// In the finally block.
那句话的真正含义是什么?
答案 0 :(得分:2)
这是文档中的“错误”。该问题已提交here。
在相同的try-catch-finally结构的潜在catch
块之前执行适当的finally
块(如果有)。
答案 1 :(得分:2)
措辞非常含糊。他们试图指示的是任何嵌套 finally
块中的try
个块 1 (没有匹配的{{1 }}的异常块将被执行,然后与catch
匹配的catch
块(然后是它自己的exception
明显地,除非它抛出另一个未捕获的异常并且运行时被拆除,这可能会发生)。
这将打印finally
,A
,B
:
C
它没有说出自己是try {
try {
throw new Exception();
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine("No!");
}
finally
{
Console.WriteLine("A");
}
}
catch (Exception ex2)
{
Console.WriteLine("B");
}
finally
{
Console.WriteLine("C");
}
的线索是它指的是finally
块 s 。由于每个finally
只能有一个try
,因此它必须引用其他finally
块。
1 无论是在finally
块本身内还是在try
调用的其他代码内。