如果在"using"块内发生异常,是否调用Dispose方法?

Bri*_*rij 2 .net c# dispose using exception

在C#中,如果在"using"块内发生异常,是否会调用Dispose方法?

Hab*_*bib 13

是的,它会被调用.

using转换为try-finally块,因此即使在可恢复的异常Dispose被调用的情况下也是如此.

请参阅:使用语句C#

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果; 实际上,这就是编译器如何翻译using语句.

考虑SqlConnection哪个实现IDisposable接口,所以如下:

using (SqlConnection conn = new SqlConnection("connectionstring"))
{
    //some work
}
Run Code Online (Sandbox Code Playgroud)

会被翻译成

{
    SqlConnection conn = new SqlConnection("connectionstring");
    try
    {
        //somework
    }
    finally
    {
        if (conn != null)
            ((IDisposable)conn).Dispose(); //conn.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

4365 次

最近记录:

11 年,12 月 前