リファクタリングの質問
-
22-08-2019 - |
質問
の方法を考える。
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の結果を渡すために良い方法はありますか?
事前のおかげで、 グレッグ
解決
ここで問題ありません。 StreamWriterのDispose()
方法は、基本的には第一、それは限り、ストリームの生きているようにぶら下がって、それを残してOKです(上記のん)ので、限り、あなたはFlush()
自身をカバーしてきたように、Flush()
を呼び出し、基になるストリームを配置します。
他の回答がライター自体を配置する提案が、それは同様に基本となるストリームを配置しますので、それは、ここでは本当にオプションではありません。
それはあなただけのストリームにXMLドキュメントを入れて、後でそれを使用している場合、私はむしろ代わりにストリームを追跡するXMLドキュメント自体を周りに渡すだろう、と述べました。しかし、おそらくあなたのコードはすべてのことのように単純ではありません。
所属していません StackOverflow