使用using块创建XmlWriter是否足够(没有调用Close())或者最好使用try / finally块并最终调用Close()?
答案 0 :(得分:16)
using块是try / finally块的快捷方式,在任何实现IDisposable的对象上调用Dispose()。
对于流和流写入器,Dispose()通常手动调用Close()。使用反射器,这是XmlWriter的Dispose方法:
protected virtual void Dispose(bool disposing)
{
if (this.WriteState != WriteState.Closed)
{
try
{
this.Close();
}
catch
{
}
}
}
所以简短的回答是肯定的,using
块将处理为您关闭XmlWriter。
答案 1 :(得分:3)
不,不需要单独调用它。这正是使用块的用途。
当执行退出使用块时,XmlWriter会被释放,而在内部,XmlWriter.Dispose
调用XmlWriter.Close
。
答案 2 :(得分:3)
但是... XmltTextWriter.Close()上的Reflector显示:
如果(this.closeOutput) { this.stream.Close(); } this.Stream = null;
closeOutput标志设置为settings.CloseOutput,可以为false。
在XmlTextWriter上使用“using”表达式时,您确定处理程序是免费的吗?