Одноразовые, использующие & Try / Catch Blocks

Имея ментальный блок сегодня, нужна рука, проверяющая мою логику, не fubar'ed.

Традиционно я бы сделал файл ввода-вывода похожим на это:

FileStream fs = null; // So it's visible in the finally block
try
{
   fs = File.Open("Foo.txt", FileMode.Open);

   /// Do Stuff
}
catch(IOException)
{
   /// Handle Stuff
}
finally
{
   if (fs != null)
      fs.Close();
}

Однако это не очень элегантно.

В идеале я хотел бы использоватьusing блок для удаления файлового потока, когда я закончу, однако я не уверен в синергии между использованием и try / catch.

Вот как я хотел бы реализовать выше:

try
{
   using(FileStream fs = File.Open("Foo.txt", FileMode.Open))
   {
      /// Do Stuff
   }
}
catch(Exception)
{
   /// Handle Stuff
}

Однако я обеспокоен тем, что преждевременный выход (через выброшенное исключение) из блока using может не позволить блоку using завершить выполнение и очистить его объект. Я просто параноик, или это действительно сработает так, как я намереваюсь?

Ответы на вопрос(6)

Ваш ответ на вопрос