给出方法
public static string[] Foo(System.IO.Stream stream)
{
XmlTextWriter xmlWriter = new XmlTextWriter(stream, System.Text.Encoding.ASCII);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Element");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Flush();
return new string[3]{"1", "2", "3"};
}
和一个调用代码
using(MemoryStream memStream = new MemoryStream())
{
string[] playerIDs = PlayerCommand.Foo(stream);
// do some stuff with stream and playerIDs
}
当控件超出using指令时,是否存在xmlWriter未在Foo中显式关闭的问题(这会使流无效)?
另外,在方法之间传递一个令人讨厌的方法,是否有更好的方法将XMLWriting的结果传递回调用代码(将其压缩并将其归档)?
提前致谢, 格雷格
答案 0 :(得分:4)
这里没问题。 StreamWriter的Dispose()
方法基本上首先调用Flush()
然后处理基础流,所以只要你自己覆盖Flush()
(你在上面做过)就可以把它挂起来了只要溪流还活着。
其他答案建议处理Writer本身,但这不是一个真正的选择,因为它也会处理底层流。
也就是说,如果您只是将XML文档放在流中然后再使用它,我宁愿传递XML文档本身,而不是跟踪流。但也许你的代码不是那么简单。