有一个很好的问题,当从 finally 中抛出异常时,Catch 块没有被评估,它正在讨论在 finally 块中抛出异常的一些有时意想不到的结果。
我想不出任何好的理由为什么要在 finally 块中抛出异常。如果之前有异常,它总是会丢失。我总是看到 finally 习惯于以不应该抛出异常的方式进行清理。
谁能解释什么时候在 finally 块中引发异常是合适的?
有一个很好的问题,当从 finally 中抛出异常时,Catch 块没有被评估,它正在讨论在 finally 块中抛出异常的一些有时意想不到的结果。
我想不出任何好的理由为什么要在 finally 块中抛出异常。如果之前有异常,它总是会丢失。我总是看到 finally 习惯于以不应该抛出异常的方式进行清理。
谁能解释什么时候在 finally 块中引发异常是合适的?
当你Exception
抛出 finally 时,它会向上传播,最重要的Exception
是在抛出的点停止,因此 finally 的其余部分不会被执行。此外,如果 try 块中发生异常,它将消失,并且当前异常将从 finally 块中抛出。
我无法想到任何情况,例如您最终Exception
出于特定原因在调用者级别抛出然后处理它(可能有其他方法来管理此类逻辑),因此您可以在调用者处水平过程进一步基于Exception
抛出。
我只能说,以后所有阅读并尝试遵循代码的眼睛都会有一个健康的惊喜。
很好,.NET 很好地支持。问题是捕捉异常,这是一个非常糟糕的做法。您正确恢复程序状态的几率非常低。
try catch finally 是非常重要的构造。可以肯定的是,即使抛出异常,finally块中的代码也会被执行。处理外部资源以释放它们非常重要。垃圾收集不会为您做到这一点。在 finally 部分中,您不应该有 return 语句或抛出异常。这样做是可能的,但这是一种不好的做法,可能会导致不可预知的结果。