Оператор using не захватывает исключения. Чтобы поймать исключения, у вас есть два варианта:
1) Разверните и используйте его вручную:
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 ().
Однако, он чувствует себя неправильно из-за дополнительной попытки перехвата, которая эффективно избыточна.
Какая стандартная практика?