在finally块中抛出异常是不错的做法?

时间:2012-08-28 04:48:11

标签: c# exception try-catch-finally

有一个很好的问题Catch block is not being evaluated when exceptions are thrown from finallys正在讨论在finally块中抛出异常的一些有时出乎意料的结果。

我想不出有什么理由要在finally块中抛出异常。如果有先前的异常,它将永远丢失。我总是看到最终习惯于以永远不会抛出异常的方式进行清理。

任何人都可以解释何时在finally块中抛出异常是合适的?

3 个答案:

答案 0 :(得分:1)

尝试抓住最后是非常重要的构造。您可以确定即使抛出异常,也会执行finally块中的代码。处理外部资源以释放它们非常重要。垃圾收集不会为您做到这一点。在最后一部分,你不应该有return语句或抛出异常。这样做是可能的,但这是一种不好的做法,可能导致不可预测的结果。

答案 1 :(得分:1)

如果最后抛出Exception,它会向上传播并且最重要的停靠位置会抛出Exception,因此finally的其余部分将不会被执行。此外,如果在try块中发生异常,它将消失,并且当前的一个将从finally块中抛出。

我无法想到任何场景,因为你最终会抛出Exception然后在调用者级别处理它出于特定原因(可能有其他方法来管理这样的逻辑),因此您可以在调用者级别进程中进一步基于抛出的Exception

我所能说的只是所有阅读并试图遵循以下代码的眼睛都会有一个健康的惊喜。

答案 2 :(得分:1)

很好,.NET支持得很好。问题是捕获异常,这是一个非常糟糕的做法。您正确恢复程序状态的几率非常低。