最近我与一位开发人员进行了一次有趣的对话,他告诉我每次写“尝试”时都必须提供“捕获”。他无法解释为什么这个规则。他告诉我这是一个良好的编程原则。为什么这个规则?
我不同意他的意见。我认为有时候你可以写一个只有“finally”块的“try”块。但是,我认为如果你写一个“捕获”,你必须在你的捕获中做一些事情。永远不要只是重新抛出错误。
答案 0 :(得分:9)
您是对的:如果您不知道如何处理异常并且只是想确保执行catch
子句,则不需要编写finally
子句。 / p>
添加catch
子句只是为了重新抛出异常,这是不好的做法。
顺便说一句,为了说明catch
和finally
实际上与两个不同的(当然不是外国的)问题相关,请注意某些语言使用不同的构造来捕获异常并且确保执行一些代码(通常是资源释放)。例如,使用defer
。
答案 1 :(得分:6)
在大多数应用程序中,try/finally
构造的数量远远超过try/catch
构造。
因为清理资源比接收异常更常见,所以你知道如何处理。
但是try/finally
几乎总是可以被C#中的using
替换,所以在C#中,你的开发人员可能在这种情况下有一点意义;但它绝对不是“良好编程原则”。
答案 2 :(得分:2)
try
{
...
}
finally
{
...
}
使您有机会在finally块中执行代码,否则如果在try块中抛出异常,则会错过该代码。 如果在发生异常时有特定的操作,则只需添加一个catch块。