重构问题

时间:2009-03-26 21:35:09

标签: c# data-structures methods memorystream xmltextwriter

给出方法

    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的结果传递回调用代码(将其压缩并将其归档)?

提前致谢, 格雷格

1 个答案:

答案 0 :(得分:4)

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

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

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