如果我写这样的代码:
try
{
using (StreamReader rdr = new StreamReader(response.GetResponseStream()))
{
}
}
catch(Exception e)
{
}
StreamReader对象抛出一个异常(从而进入catch),using块是否正确完成并处理?或者我是否需要在try中包装using块的内容?
想确保我得到适当的清理。
答案 0 :(得分:0)
使用块是否正确完成并处理?
是。但是,如果GetResponseStream
抛出异常,那么就没有什么可以处理的,因为你还没有初始化StreamReader
。
答案 1 :(得分:0)
是。一旦控件退出使用块,对象就会被释放。
答案 2 :(得分:0)
是肯定的。 using
语句的解释类似于try ... finally
。
让我们看一个例子:
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();
}
}
要了解使用声明,请see this msdn article。