Pregunta

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

y un código de llamada

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

Cuando el control pasa de la directiva using, ¿existe un problema que XMLWriter no estaba cerrada de forma explícita en Foo (lo que haría que la corriente inútil)?

Además, está pasando una corriente entre los métodos desagradables, hay una mejor manera de pasar los resultados de XMLWriting volver al código de llamada (que será la cremallera y presentar a la basura)?

Gracias de antemano, Greg

¿Fue útil?

Solución

No hay problema aquí. Método Dispose() de un StreamWriter llama básicamente primera Flush() y luego se dispone la corriente subyacente, por lo que el tiempo que usted tiene la Flush() cubrió a sí mismo (lo que lo hace más arriba) que está bien dejarlo colgando, siempre y cuando de la corriente viva.

Las otras respuestas sugieren la eliminación del escritor en sí, pero eso no es realmente una opción aquí, porque va a disponer el flujo subyacente también.

Dicho esto, si usted está poniendo un documento XML en la corriente y después de usarlo más adelante, prefiero pasar el documento XML en torno vez de hacer el seguimiento de la corriente. Pero tal vez su código no es tan simple como todo eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top