0

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

谢谢马特

4

1 回答 1

1

通常,如果您的using语句中的类IDisposable正确实现(在这种情况下,如果StringWriter并在方法实现中XmlTextWriter调用它们的方法),则通常不需要。CloseDispose

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

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

textWriter.Close();

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

有关IDisposable查看此链接的更多信息。

于 2015-08-20T21:52:57.357 回答