为什么嵌套的using块会多次处理一个对象?
参考 CA2202:
在下面的示例中,创建在外部using语句中的Stream对象在内部using语句的结束处被释放,在包含流对象的StreamWriter对象的Dispose方法中释放。在外部using语句结束时,流对象再次被释放。第二次释放违反了CA2202。
using (Stream stream = new FileStream("file.txt", FileMode.OpenOrCreate))
{
using (StreamWriter writer = new StreamWriter(stream))
{
// Use the writer object...
}
}
我知道在大多数情况下我可以使用
using ()
using ()
{ }
当我无法做到时,我很高兴能够回归
try
finally
,就像建议的那样,我只是想知道为什么它能这样工作。这只是生成的代码可以被解释的最佳方式,"好的,使用块正在关闭,让我处理所有对象。"还是有一些原因让它以这种方式工作?