【问题标题】:If an exception occurs inside a "using" block, is the Dispose method called? [duplicate]如果在“使用”块内发生异常,是否调用了 Dispose 方法? [复制]
【发布时间】:2014-02-27 07:22:43
【问题描述】:

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

【问题讨论】:

  • 是..................................
  • 当您输入关键字c# using dispose exception 时,google 会返回什么?
  • @Brij 不,第一个结果是你的答案
  • @Brij 你确实意识到,即使它们是“StackOverflow 问题”,它们通常也会得到回答?

标签: c# .net exception dispose using


【解决方案1】:

是的,它会被调用。

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

见:using statement C#

using 语句确保 Dispose 被调用,即使 在对象上调用方法时发生异常。你可以 通过将对象放入 try 块中来获得相同的结果,然后 然后在 finally 块中调用 Dispose;事实上,这就是 using 语句由编译器翻译。

考虑实现IDisposable接口的SqlConnection,如下:

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

会被翻译成

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 2011-07-12
    • 2019-10-13
    相关资源
    最近更新 更多