Оператор using не фиксирует исключения. Чтобы перехватить исключения, у вас есть два варианта:
1) Развернуть using и реализовать его вручную:
void MyFunc()
{
StreamReader myReader = null;
try
{
myReader = new StreamReader(path);
//use myReader
}
catch (Exception e)
{
//do something with exception
}
finally
{
if (myReader != null)
myReader.Dispose();
}
}
или 2) сохранить использование и заключить его в другой блок try catch
void MyFunc()
{
try
{
using (StreamReader myReader = new StreamReader(path))
{
//use myReader
}
}
catch (Exception e)
{
//do something with exception
}
}
Для меня второй выглядит аккуратнее, особенно когда у вас есть несколько операторов using, поскольку он лучше описывает поток и удаляет явные объявления, нулевые проверки и вызовы Dispose ().
Однако это кажется неправильным из-за дополнительных накладных расходов на try catch, которые фактически избыточны.
Какова стандартная практика?