“在执行catch块之前,运行时将检查finally块。”这是什么意思?

时间:2019-02-26 07:31:02

标签: c# exception

来自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.

那句话的真正含义是什么?

2 个答案:

答案 0 :(得分:2)

这是文档中的“错误”。该问题已提交here

在相同的try-catch-finally结构的潜在catch块之前执行适当的finally块(如果有)。

答案 1 :(得分:2)

措辞非常含糊。他们试图指示的是任何嵌套 finally块中的try个块 1 (没有匹配的{{1 }}的异常块将被执行,然后与catch匹配的catch块(然后是它自己的exception明显地,除非它抛出另一个未捕获的异常并且运行时被拆除,这可能会发生)。

这将打印finallyAB

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调用的其他代码内。