XmlWriter:如果使用using块,是否需要调用Close()?

时间:2010-04-14 18:04:04

标签: c#

使用using块创建XmlWriter是否足够(没有调用Close())或者最好使用try / finally块并最终调用Close()?

3 个答案:

答案 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”表达式时,您确定处理程序是免费的吗?

相关问题