调用 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
通常不需要(在这种情况下,如果 StringWriter
和 XmlTextWriter
调用它们的Close
方法在 Dispose
方法实现中)。
在 using
块的末尾,将自动调用 Dispose
方法。
从 XmlTextWriter.cs class 的 Reference Source 可以看到 Close()
方法中的以下行
textWriter.Close();
textWriter
是在构造函数中收到的,所以你的问题的答案是你 不需要 调用 Close()
方法您的 StringWriter
实例,但这样做不会造成任何伤害。
有关 IDisposable
的更多信息,请查看 this link。
我发现一些代码没有用 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
通常不需要(在这种情况下,如果 StringWriter
和 XmlTextWriter
调用它们的Close
方法在 Dispose
方法实现中)。
在 using
块的末尾,将自动调用 Dispose
方法。
从 XmlTextWriter.cs class 的 Reference Source 可以看到 Close()
方法中的以下行
textWriter.Close();
textWriter
是在构造函数中收到的,所以你的问题的答案是你 不需要 调用 Close()
方法您的 StringWriter
实例,但这样做不会造成任何伤害。
有关 IDisposable
的更多信息,请查看 this link。