这是一个相关的问题: 在返回不良样式/危险之后,使用finally子句进行工作吗?
在引用的Q中,最终代码与所使用的结构和预取的必要性有关。我的问题有所不同,我认为这与广大受众密切相关。我的特定示例是C#winform应用程序,但这同样适用于C ++ / Java。
我注意到很多try-catch-finally块,其中有很多与异常无关的代码以及埋在该块中的异常处理/清除。而且,我会偏向于使用非常紧密的try-catch-finally块,并将其代码与异常和处理紧密相关。这是我所看到的一些示例。
尝试块将设置许多初步调用和变量,从而导致可能引发的代码。日志信息将被设置并在try块中运行。
最后,块将具有表单/模块/控件格式化调用(尽管应用程序即将终止,如catch块所示),以及创建新对象(例如面板)。
大致:
methodName(...) { 尝试 { //该方法的大量代码... //可能抛出的代码... //该方法还有更多代码和返回值... } 抓住(某物) {//处理异常} 最后 { //由于异常而进行一些清理,将事情关闭 //有关所创建内容的更多代码(忽略任何异常都可能引发)... //可能会创建更多对象 } }
该代码有效,因此具有一定的价值。它没有很好地封装,逻辑有点混乱。我(痛苦地)熟悉了代码移位和重构的风险,因此我的问题归结为想要了解其他人对类似结构的代码的经验。
不良的风格是否有理由进行更改?有没有人被类似的情况严重烧死?您是否愿意分享糟糕经历的细节?别说是因为我反应过度,风格还不错吗?获得整理事物的维护利益?
finally
C#的作用)。什么是C ++等效项?我在想的是catch
C之后的代码,它对C#之后的代码也是如此finally
。
Environment.FailFast()
;如果您有未捕获的异常,则可能无法执行。如果您有一个finally
手动迭代的迭代器块,它将变得更加复杂。
finally
。RAII / RRID / SBRM(您喜欢的首字母缩写)都涵盖了所有良好的用途。