您可以使用它来确保在try
个内容之后或对异常执行某些操作,但是当您不希望使用该异常时.
需要明确的是,这并不隐藏例外情况.在异常向上传播到调用堆栈之前运行finally
块.
当使用using
关键字时,您也会无意中使用它,因为这会编译成try-finally
(不是精确的转换,但为了参数起见,它已经足够接近了).
try
{
TrySomeCodeThatMightException();
}
finally
{
CleanupEvenOnFailure();
}
在finally
中运行的代码不一定能运行,但是在没有保证的情况下,它是相当边缘的——我甚至记不起来了.我所记得的是,如果你是这样的话,很有可能不跑finally
米并不是你最大的问题:-)所以基本上不用担心.
如果进程被终止,Update from Tobias: finally
将不会运行.
Update from 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.
}
编译成something个,比如:
SqlConnection conn;
try
{
conn = new SqlConnection("");
// Do stuff.
}
finally
{
if (conn != null)
conn.Dispose();
}