Быстрый вопрос об использовании вложенных одноразовых ресурсов в одном выражении «using»: Должен ли я записывать инструкцию использования каждого одноразового использования или я могу вложить их в один? Пример:Вложение 'IDisposable' в одном выражении 'using'
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);
}
против
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);
}
Просто любопытно, если когда блок выполняется выполнение, неназванный FileStream из «Myfile.txt» очищается, потому что это в использовании заявление с GZipStream или если он остается открытым и его необходимо очистить через некоторое время после этого.
Редактировать: Чтобы быть ясным, я не спрашиваю о вложенности с помощью утверждений. Я спрашиваю, будет ли IDsposable, созданный внутри другого оператора IDisposable 'using', будет удален в конце блока. Любое объяснение причин или почему не было бы оценено.
Возможный дубликат [Вложенные операторы using в C#] (http://stackoverflow.com/questions/1329739/nested-using-statements-in-c-sharp) – Joshua
Если конструктор FileStream успешно завершен, но конструктор GZipStream не работает, тогда , ну, упс. –
Возможно, стоит настроить очень простой набор фиктивных классов, которые реализуют IDisposable и смотреть, что происходит в отладчике? – DanS