2009-03-26 5 views
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 
} 

컨트롤이 사용 지침에서 통과 감안할 때, XmlWriter를 명시 적으로 푸 폐쇄되지 않은 문제가 (이 인 스트림을 쓸모 없게 만들겠습니까?)

또한 스트림간에 메서드를 전달하는 것이 좋지 않습니다. XMLWriting의 결과를 호출 코드로 전달하는 더 좋은 방법이 있습니까? (이를 압축하여 멀리 파일에 저장합니다)? 사전에

감사합니다, 그렉 여기에 문제가 없습니다

답변

4

. StreamWriter의 Dispose() 메서드는 기본적으로 먼저 Flush()을 호출 한 다음 기본 스트림을 처리하므로 Flush()을 덮어두면 (위에서 수행 한 것처럼) 스트림이 살아있는 한 매달려있는 것이 좋습니다.

다른 답변은 Writer 자체를 삭제할 것을 제안하지만 실제로는 기본 스트림을 처리하기 때문에 실제로는 옵션이 아닙니다.

XML 문서를 스트림에 넣은 다음 나중에 사용하는 경우 스트림을 추적하는 대신 XML 문서 자체를 전달하는 것이 좋습니다. 하지만 코드가 모든 것만 큼 단순하지는 않습니다.

+0

예, 좋은 지적입니다. –

+0

다른 답변 :) LOL –

+0

ICSharpCode.SharpZipLib.Zip으로 압축하기 전에 저장해야한다고 생각해서 xmldocument를 전달하지 않았습니다. 아마도 이것이 잘못된 것일까 요? –