Выдайте исключение в блоке попытки

    try { 
        if (isFileDownloaded)
            //do stuff
        else
            throw new CustomException()
   } 
   catch (Exception e)
   {
       // something went wrong save error to log
   }
   finally
   {
       //release resources
   }

Мой вопрос, был бы catch выгоды ApplicationException добавленный блок попытки? это находится в плохом стиле кодирования? Это должно быть записано в другом отношении?

16
задан Quincy 20 July 2010 в 19:49
поделиться

4 ответа

Функция catch перехватит ваше исключение (и любое другое, которое возникнет). Учитывая это, я стараюсь по возможности избегать написания подобного кода.

Лично я не вижу смысла в обработке исключения (catch) для исключения, брошенного в той же области видимости. Если вы можете обработать ошибку в своем методе - поместите обработку исключений (т.е. логирование) непосредственно в блок try.

Использование catch более полезно, IMO, для перехвата исключений, брошенных методами внутри вашего try блока. Это будет полезно, например, если в секции // do stuff будет вызван метод, который вызовет исключение.

Кроме того, я рекомендую не ловить каждое исключение (Exception e), а скорее конкретные типы исключений, которые вы можете корректно обработать. Единственным исключением из этого может быть случай, когда вы перебрасываете исключение внутри catch - т.е. используете его в целях логирования, но при этом позволяете ему подниматься в стеке вызовов.

24
ответ дан 30 November 2019 в 16:57
поделиться

Да, он будет ловить ApplicationException, поскольку он является производным от Exception.

Обработка базового исключения должна быть в порядке в большинстве случаев, если вам не нужно регистрировать или делать что-то с другим типом исключения...

try{
    if (isFileDownloaded)
       //do stuff
    else
       throw new ApplicationException();
}
catch(ApplicationException ae)
{
   // log it application exception here...
}

catch(Exception ex)
{
   // log all other exceptions here...
}
finally
{
   // release resources...
}
8
ответ дан 30 November 2019 в 16:57
поделиться

Также, к вашему сведению, ApplicationException как исключение, от которого можно отталкиваться, было устаревшим с .NET 2.0. Он никогда не предназначался в качестве исключения, которое можно было бы бросать самостоятельно, так что, вероятно, вам вообще не следует его использовать.

2
ответ дан 30 November 2019 в 16:57
поделиться

Да, catch будет ловить ваше ApplicationException, и да, это плохой стиль кодирования. Как хорошее общее правило, ловите только специфические исключения и те, с которыми вы собираетесь что-то делать, например, исправлять состояние приложения.

1
ответ дан 30 November 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: