Pergunta

Dado um método

    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"};
    }

e um código de chamada

using(MemoryStream memStream = new MemoryStream())
{
     string[] playerIDs = PlayerCommand.Foo(stream);
     // do some stuff with stream and playerIDs
}

Quando o controle passa para fora utilizando a directiva, há um problema que xmlWriter não foi explicitamente fechado em Foo (o que tornaria o fluxo inútil)?

Além disso, é passar uma corrente entre os métodos repugnantes, há uma maneira melhor para passar os resultados de XMLWriting volta para o código de chamada (que vai zip-lo e arquivá-la)?

Agradecemos antecipadamente, Greg

Foi útil?

Solução

Não há problema aqui. método Dispose() de um StreamWriter basicamente primeiras chamadas Flush() e, em seguida, descarta o fluxo subjacente, por isso, enquanto você tem a Flush() cobriu-se (o que você faz acima) não há problema em deixá-lo pendurado, enquanto a do fluxo vivo.

As outras respostas sugerem a eliminação do próprio escritor, mas isso não é realmente uma opção aqui, porque vai eliminar o fluxo subjacente também.

Dito isto, se você está apenas colocando um documento XML no fluxo e, em seguida, usá-lo mais tarde, eu prefiro passar o documento XML-se em torno ao invés de manter o controle do fluxo. Mas talvez seu código não é tão simples assim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top