更新:这实际上不是一个很好的答案。另一方面,也许这是一个很好的答案,因为它说明了一个成功的完美示例finally,而开发人员(即我)可能无法确保正确清理。在下面的代码中,考虑抛出异常以外的情况。SpecificException那么第一个示例仍然会执行清理,而第二个示例则不会,即使开发人员可能认为“我捕获了异常并处理了它,所以后续代码肯定会运行”。
每个人都给出了使用try/finally 而不使用catch. 这样做仍然有意义catch即使您抛出异常,考虑您想要返回值的情况*。
try\n{\n DoSomethingTricky();\n return true;\n}\ncatch (SpecificException ex)\n{\n LogException(ex);\n return false;\n}\nfinally\n{\n DoImportantCleanup();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n上面的替代方案没有finally的替代方案(在我看来)可读性稍差:
bool success;\n\ntry\n{\n DoSomethingTricky();\n success = true;\n}\ncatch (SpecificException ex)\n{\n LogException(ex);\n success = false;\n}\n\nDoImportantCleanup();\nreturn success;\nRun Code Online (Sandbox Code Playgroud)\n\n*我确实认为//更好的例子是在块中重新抛出异常(使用,而不是\ xe2\x80\x94 但那是另一个主题),因此是必要的,因为在/不会运行。这通常是通过对资源的语句来完成的,但情况并非总是如此。有时清理并不是专门的调用(或者不仅仅是调用)。trycatchfinallythrow throw excatchfinallytrycatchusingIDisposableDisposeDispose
| 归档时间: |
|
| 查看次数: |
564 次 |
| 最近记录: |