我了解try-catch 的工作原理以及try-finally 的工作原理,但我发现自己(通常)在两个完全不同的场景中使用它们:
- try-finally(或
using
在 C# 和 VB 中)主要用于一些中型代码块,这些代码块使用一些需要正确处理的资源。 - try-catch主要用于
- 围绕可能以非常特定的方式失败的单个语句或
- (作为一个包罗万象的)在应用程序的一个非常高的级别,通常直接在一些用户界面操作之下。
以我的经验,try-catch-finally是合适的情况,即我想要捕获某些特定异常的块与我使用一些一次性资源的块完全相同的情况非常罕见。然而,C#、VB和Java的语言设计者似乎认为这是一个非常常见的场景。VB 设计者甚至考虑将catch添加到using
.
我错过了什么吗?还是我对try-catch的限制性使用过于迂腐?
编辑:澄清一下:我的代码通常看起来像这样(为清楚起见展开功能):
Try
do something
Aquire Resource (e.g. get DB connection)
Try
do something
Try
do something that can fail
Catch SomeException
handle expected error
do something else...
Finally
Close Resource (e.g. close DB connection)
do something
Catch all
handle unexpected errors
这似乎比将两个catch中的任何一个都放在与finally相同的水平上只是为了避免缩进更有意义。