Перехват исключений. Вы заменяете или оборачиваете оператор using

Оператор 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, которые фактически избыточны.

Какова стандартная практика?

0
задан GazTheDestroyer 18 November 2011 в 09:27
поделиться