我发现一些代码没有使用using子句正确包装XMLTextWriter和StringWriter。当我纠正它时,我偶然发现了一个有趣的问题:
我是否必须在每个编写器上显式添加对Close()的调用,或者XMLTextWriter是否自动在StringWriter实例上调用Close()?
using (StringWriter stringWriter = new StringWriter(sb))
{
using (XmlTextWriter writer = new XmlTextWriter(stringWriter))
{
writer.Flush();
writer.Close();
}
// is stringWriter.Close(); required here?
}
日Thnx 马特
答案 0 :(得分:1)
通常,如果using
语句中的类正确实现IDisposable
(在这种情况下,如果StringWriter
和XmlTextWriter
调用其Close
方法,则不需要在Dispose
方法实现中。
在using
块结束时,将自动调用Dispose
方法。
从XmlTextWriter.cs类的参考源,您可以在Close()
方法中看到以下行
textWriter.Close();
在构造函数中收到textWriter
,因此您的问题的答案是不需要来调用Close()
上的StringWriter
方法实例,但这样做不会造成伤害。
有关IDisposable
的详细信息,请查看this link。