Frage

Bei einem Verfahren

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

und ein Aufrufcode

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

Wenn die Steuerung aus der Verwendung Richtlinie geht, gibt es ein Problem, das xmlWriter wurde in Foo nicht explizit geschlossen (die den Strom nutzlos machen würden)?

Auch ist ein Strom zwischen Methoden unappetitliche vorbei, gibt es einen besseren Weg, um die Ergebnisse der XMLWriting zurück zu dem anrufenden Code (die es zip-Datei und es weg) passieren?

Vielen Dank im Voraus, Greg

War es hilfreich?

Lösung

Kein Problem hier. Ein Stream des Dispose() Methode grundsätzlich ruft zuerst Flush() und verfügt dann den zugrunde liegenden Stream, so lange, wie Sie die Flush() sich bedeckt (die Sie oben tun), es ist OK, es zu verlassen, solange der Strom lebt hängen.

Die anderen Antworten deuten darauf hin, Anordnen der Verfasser selbst, aber das ist nicht wirklich eine Option hier, weil es auch die zugrunde liegenden Stream verfügen wird.

Das heißt, wenn Sie nur ein XML-Dokument in dem Strom setzen und mit ihm dann später, würde ich eher das XML-Dokument übergeben sich um stattdessen den Überblick über den Strom zu halten. Aber vielleicht Ihr Code ist nicht so einfach, wie das alles.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top