有一个很好的问题Catch block is not being evaluated when exceptions are thrown from finallys正在讨论在finally块中抛出异常的一些有时出乎意料的结果。
我想不出有什么理由要在finally块中抛出异常。如果有先前的异常,它将永远丢失。我总是看到最终习惯于以永远不会抛出异常的方式进行清理。
任何人都可以解释何时在finally块中抛出异常是合适的?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果最后抛出Exception
,它会向上传播并且最重要的停靠位置会抛出Exception
,因此finally的其余部分将不会被执行。此外,如果在try块中发生异常,它将消失,并且当前的一个将从finally块中抛出。
我无法想到任何场景,因为你最终会抛出Exception
然后在调用者级别处理它出于特定原因(可能有其他方法来管理这样的逻辑),因此您可以在调用者级别进程中进一步基于抛出的Exception
。
我所能说的只是所有阅读并试图遵循以下代码的眼睛都会有一个健康的惊喜。
答案 2 :(得分:1)
很好,.NET支持得很好。问题是捕获异常,这是一个非常糟糕的做法。您正确恢复程序状态的几率非常低。