调用 close on 将成员 StringWriter 传递给 XMLTextWriter

Calling close on passed in member StringWriter to XMLTextWriter

我发现一些代码没有用 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?
    }

谢谢 马特

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

using 块的末尾,将自动调用 Dispose 方法。

XmlTextWriter.cs class 的 Reference Source 可以看到 Close() 方法中的以下行

textWriter.Close();

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

有关 IDisposable 的更多信息,请查看 this link