调用close将成员StringWriter传递给XMLTextWriter

时间:2015-08-20 21:45:55

标签: c# serialization xmltextwriter stringwriter

我发现一些代码没有使用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 马特

1 个答案:

答案 0 :(得分:1)

通常,如果using语句中的类正确实现IDisposable(在这种情况下,如果StringWriterXmlTextWriter调用其Close方法,则不需要在Dispose方法实现中。

using块结束时,将自动调用Dispose方法。

XmlTextWriter.cs类的参考源,您可以在Close()方法中看到以下行

textWriter.Close();

在构造函数中收到textWriter,因此您的问题的答案是不需要来调用Close()上的StringWriter方法实例,但这样做不会造成伤害。

有关IDisposable的详细信息,请查看this link