在某些情况下是否适合使用 try-finally
block 而不使用 catch
block ?
最佳答案
您可以使用它来确保某些操作发生在 try
内容之后或发生异常时,但您不希望使用该异常。
需要说明的是,这并没有隐藏异常。 finally
block 在异常传播到调用堆栈之前运行。
当你使用 using
关键字时,你也会无意中使用它,因为这会编译成一个 try-finally
(不是一个精确的转换,但为了论证它是足够接近)。
try
{
TrySomeCodeThatMightException();
}
finally
{
CleanupEvenOnFailure();
}
在 finally
中运行的代码不能保证运行,但是不能保证它的情况相当边缘 - 我什至不记得了。我只记得,如果你是那种情况,那么不运行 finally
很可能不是你最大的问题:-) 所以基本上不要担心。
来自 Tobias 的更新:如果进程被终止,finally
将不会运行。
来自 Paddy 的更新: Conditions when finally does not execute in a .net try..finally block
您可能看到的最普遍的示例是处理数据库连接或外部资源,即使代码失败也是如此:
using (var conn = new SqlConnection("")) // Ignore the fact we likely use ORM ;-)
{
// Do stuff.
}
编译成东西,比如:
SqlConnection conn;
try
{
conn = new SqlConnection("");
// Do stuff.
}
finally
{
if (conn != null)
conn.Dispose();
}
关于c# - 使用 'try-finally' block 而不使用 'catch' block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9291437/