哪种方式更适合“;手柄;一个异常,我想让气泡出现,但执行清理代码

本文关键字:气泡 执行 代码 一个 方式更 手柄 异常 | 更新日期: 2023-09-27 18:29:58

我正在处理一个新项目,有一段代码我不想实际处理异常,但要确保关闭所有数据库连接。我想知道处理这个问题的最佳方式是什么。我看到了两种方法,但不确定哪一种会更清楚:

SqlConnection con = new SqlConnection(connectionstring);
try
{
    con.open()
    //DoStuff
}
catch(Exception)
{
    throw;
}
finally
{
    con.close();
    con.dispose();
}

try
{
    con.open()
    //DoStuff
}
finally
{
    con.close();
    con.dispose();
}

无论哪种方式,我都会将异常传递给要处理的调用代码,但仍会清理连接。

哪种方式更适合“;手柄;一个异常,我想让气泡出现,但执行清理代码

您可以使用using语句来封装您的连接。它将转换为try-finally块,就像您的第二个代码示例中一样。

由于您没有对异常(如日志记录)执行任何操作,因此可以省略catch块。

你可以像一样使用using

using (SqlConnection con = new SqlConnection(connectionstring))
{
}

这将确保您的连接在using块的末尾被处理,即使在出现异常的情况下也是如此。您只能将using语句与那些实现IDisposable接口的对象一起使用。

如果您要处理不实现IDisposable的对象,那么您的第二个代码片段(with try finally)就足够了,因为您希望出现异常。