在某些情况下,使用try-finally块而不使用catch块是否合适?

推荐答案

您可以使用它来确保在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();
}

.net相关问答推荐

[x.x.x,)在Packages.lock.json依赖项中是什么意思?

在 F# 中处理 Option - Some(null) 的好策略是什么

在数据网格中:如何在更改单元格 A 中的值后显示单元格 B 中的更改

如何在 .Net Core EF 中组合多个条件表达式来过滤数据?

双精度的 C++ 和 C# 十六进制值之间的差异

标签从右向左增长

在c#中计算中位数

RNGCryptoServiceProvider 的优缺点

HttpClient 和使用代理 - 不断得到 407

C# 中的 myCustomer.GetType() 和 typeof(Customer) 有什么区别?

C# 相当于 Java 的 <?在泛型中扩展 Base>

修剪数组中的所有字符串

向 .NET 应用程序添加脚本功能

如何将 XPath 与 XElement 或 LINQ 一起使用?

如何在多个解决方案之间共享相同的 Resharper 设置,无需人工干预?

场与财产.性能优化

我应该绑定到 ICollectionView 还是 ObservableCollection

.NET 高级别的 .NET 4.0 和 .NET 4.5 的区别

了解 C# 中的协变和逆变接口

从不同程序集中的类名中解析类型