Schnelle Frage zur Verwendung verschachtelter Disposables in einer einzigen' using'-Anweisung: Soll ich die using-Anweisung jedes Disposables ausschreiben oder kann ich sie verschachteln? Beispiel:Verschachteln von IDisposables in einer einzigen 'using'-Anweisung
using(FileStream inFile = new FileStream("myFile.txt", FileMode.Open))
using(GZipStream gzip = new GZipStream(inFile, CompressionMode.Decompress))
using(FileStream outFile = new FileStream("myNewFile.txt", FileMode.CreateNew))
{
gzip.CopyTo(outstream);
}
gegen
using(GZipStream gzip = new GZipStream(new FileStream("myFile.txt", FileMode.Open), CompressionMode.Decompress))
using(FileStream outFile = new FileStream("myNewFile.txt", FileMode.CreateNew))
{
gzip.CopyTo(outstream);
}
nur neugierig, ob, wenn der Block ausgeführt wird getan wird, wird die unbenannte Filestream von „MYFILE.TXT“ gereinigt, weil es mit dem GZipStream in der using-Anweisung ist oder wenn es offen bleibt und danach wieder aufgeräumt werden muss.
Bearbeiten: Nur um klar zu sein, ich frage nicht über Verschachtelung mit Anweisungen. Ich frage, ob ein IDisposable, das in einer 'using'-Anweisung eines anderen IDisposables erstellt wird, am Ende der Sperre entsorgt wird. Jede Erklärung warum oder warum nicht, würde geschätzt werden.
Mögliches Duplikat von [Nested using-Anweisungen in C#] (http://stackoverflow.com/questions/1329739/nested-using-statements-in-c-sharp) – Joshua
Wenn der FileStream-Konstruktor erfolgreich ist, aber der GZipStream-Konstruktor fehlschlägt naja, oops. –
Vielleicht lohnt es sich, eine sehr einfache Gruppe von Dummy-Klassen einzurichten, die IDisposable implementieren und beobachten, was im Debugger passiert? – DanS