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

时间:2014-02-03 17:23:58

标签: c# .net exception dispose using

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

1 个答案:

答案 0 :(得分:12)

是的,它会被调用。

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

请参阅:using statement C#

  

using语句确保即使调用Dispose也会调用   在对象上调用方法时发生异常。您可以   通过将对象放在try块中来实现相同的结果   然后在finally块中调用Dispose;其实这是怎么回事   using语句由编译器翻译。

考虑实现SqlConnection接口的IDisposable,所以:

using (SqlConnection conn = new SqlConnection("connectionstring"))
{
    //some work
}

会被翻译成

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