在某些情况下,使用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相关问答推荐

将多行参数传递给Power Shell中的DotNet Pack命令

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

Docker镜像mcr.microsoft.com/dotnet/aspnet:8.0不能在Windows上构建

在`MAUI`应用中使用Android`MediaPlayer`的`prepare`方法只在发布模式下和在物理设备上崩溃

.NET 7.0中的UseHttpsRedirection和IIS生产部署

为什么解码后的字节数组与原始字节数组不同?

NET 6:控制器方法不可访问

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

.NET 应用程序的链接器状态(又名请先生,我可以有一个链接器2009 年版)

具有透明背景且包含不透明控件的 WPF 窗口

简单委托(委托)与多播委托

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

隐式与显式接口实现

如何更改 double.ToString() 中小数点的符号?

公钥令牌的作用是什么?

VB.NET 与 C# 整数除法

如何在 C# 中安全地将 System.Object 转换为bool?

.Net 中 AOP 的最佳实现是什么?

获取系统中已安装的应用程序

安装带有恢复操作的 Windows 服务以重新启动