C# iDisposable对象使用block和try/catch

C# iDisposable对象使用block和try/catch,c#,C#,如果我写这样的代码: try { using (StreamReader rdr = new StreamReader(response.GetResponseStream())) { } } catch(Exception e) { } StreamReader对象抛出异常(从而获得捕获),using块是否正确完成并释放?或者我需要在try中包装using块的内容吗 我想确保我能适当地清理 使用块是否正确完成并处理 对。但是,如果GetResponseStream

如果我写这样的代码:

try
{
    using (StreamReader rdr = new StreamReader(response.GetResponseStream()))
    {

    }
}
catch(Exception e)
{

}
StreamReader对象抛出异常(从而获得捕获),using块是否正确完成并释放?或者我需要在try中包装using块的内容吗

我想确保我能适当地清理

使用块是否正确完成并处理

对。但是,如果
GetResponseStream
抛出异常,那么就没有什么可处理的,因为您尚未初始化
StreamReader

使用块是否正确完成并处理


对。但是,如果
GetResponseStream
引发了异常,那么就没有什么可处理的,因为您尚未初始化
StreamReader

是。控件一退出使用块,对象就被释放。

是。控件一退出使用块,对象就被释放。

是<代码>使用语句的解释类似于<代码>尝试。。。最后

让我们看一个例子:

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}
前面的代码示例在编译时扩展为以下代码(注意额外的大括号用于创建对象的有限范围):

例如:

Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
   if (font1 != null)
     ((IDisposable)font1).Dispose();
  }
}

要了解如何使用语句,请选择“是”<代码>使用语句的解释类似于<代码>尝试。。。最后

让我们看一个例子:

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}
前面的代码示例在编译时扩展为以下代码(注意额外的大括号用于创建对象的有限范围):

例如:

Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
   if (font1 != null)
     ((IDisposable)font1).Dispose();
  }
}

要了解如何使用语句,请,。

啊,对不起:(我没看到那个…)jon在这里回答:谢谢Meirion HughesAh抱歉:(我没看到那个…)jon在这里回答:谢谢Meirion Hughes