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()(上記で行った) 自分でカバーしている限り、ストリームが生きている限り、ハングしたままにしても問題ありません。

他の回答では、ライター自体を破棄することを提案していますが、基になるストリームも破棄するため、ここでは実際にはオプションではありません。

とはいえ、XML ドキュメントをストリームに入れ、後でそれを使用する場合は、ストリームを追跡するのではなく、XML ドキュメント自体を渡します。しかし、おそらくあなたのコードはそれほど単純ではありません。

于 2009-03-26T21:40:26.527 に答える