0

给定一个方法

    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 中显式关闭的问题(这会使流无用)?

此外,在方法之间传递 Stream 是否令人讨厌,是否有更好的方法将 XMLWriting 的结果传递回调用代码(这会将其压缩并归档)?

在此先感谢,格雷格

4

1 回答 1

4

这里没问题。StreamWriter 的Dispose()方法基本上首先调用Flush()然后处理底层流,所以只要你Flush()自己有覆盖(你在上面做的)只要流还活着就可以让它挂起。

其他答案建议处置 Writer 本身,但这在这里并不是一个真正的选择,因为它也会处置底层流。

也就是说,如果您只是将 XML 文档放入流中然后稍后使用它,我宁愿传递 XML 文档本身而不是跟踪流。但也许你的代码并不那么简单。

于 2009-03-26T21:40:26.527 回答