0

最近我与一位开发人员进行了一次有趣的对话,他告诉我每次编写“尝试”时都必须提供“捕获”。他无法解释为什么会有这条规则。他告诉我,这是一个好的编程原则。为什么有这个规则?

供你参考,我不同意他的看法。我认为有时你可以编写一个只有“finally”块的“try”块。但我确实认为如果你写了一个“catch”,你必须在你的 catch 中做一些事情。永远不要只是重新抛出错误。

4

3 回答 3

9

您是对的:catch如果您不知道如何处理异常并且只想确保finally执行您的子句,则不需要编写子句。

添加一个catch子句只是为了重新抛出异常是不好的做法。

顺便说一句,为了说明这实际上与两个不同的(当然不是外来的)问题有关,请注意,某些语言使用不同的构造来捕获异常并确保执行某些代码(通常是资源释放)catchfinally去使用defer例如。

于 2012-09-11T12:10:10.767 回答
6

在大多数应用程序中try/finally,构造的数量远远多于try/catch构造。

因为拥有要清理的资源比接收您知道如何处理的异常要常见得多。

但是在 C# 中try/finally几乎总是可以替换为 using但这绝对不是“良好编程的原则”。

于 2012-09-11T12:10:56.187 回答
2
try
{
    ...
}
finally
{
    ...
}

使您有机会在 finally 块中执行代码,否则如果在 try 块中引发异常,这些代码将被错过。如果发生异常时有特定的事情要做,则只需要添加一个 catch 块。

于 2012-09-11T12:13:18.917 回答