哪个是"处理"异常的更好方法我想让它冒泡但执行清理代码

Rub*_*der 0 c#

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

SqlConnection con = new SqlConnection(connectionstring);

try
{
    con.open()
    //DoStuff
}
catch(Exception)
{
    throw;
}
finally
{
    con.close();
    con.dispose();
}
Run Code Online (Sandbox Code Playgroud)

要么

try
{
    con.open()
    //DoStuff
}
finally
{
    con.close();
    con.dispose();
}
Run Code Online (Sandbox Code Playgroud)

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

Hab*_*bib 5

您可以使用usingstatement括起您的连接.它将转换为try-finally块,就像在第二个代码示例中一样.

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

您可以使用using:

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

}
Run Code Online (Sandbox Code Playgroud)

这将确保您的连接在using块结束时处理,即使在例外情况下也是如此.您只能将using语句与那些实现IDisposable接口的对象一起使用.

如果你要处理那些没有实现的对象,IDisposable那么你的第二个代码片段(使用try-finally)就足够了,因为你想让异常冒泡.