try {
if (isFileDownloaded)
//do stuff
else
throw new CustomException()
}
catch (Exception e)
{
// something went wrong save error to log
}
finally
{
//release resources
}
Мой вопрос, был бы catch
выгоды ApplicationException
добавленный блок попытки? это находится в плохом стиле кодирования? Это должно быть записано в другом отношении?
Функция catch
перехватит ваше исключение (и любое другое, которое возникнет). Учитывая это, я стараюсь по возможности избегать написания подобного кода.
Лично я не вижу смысла в обработке исключения (catch) для исключения, брошенного в той же области видимости. Если вы можете обработать ошибку в своем методе - поместите обработку исключений (т.е. логирование) непосредственно в блок try.
Использование catch
более полезно, IMO, для перехвата исключений, брошенных методами внутри вашего try
блока. Это будет полезно, например, если в секции // do stuff
будет вызван метод, который вызовет исключение.
Кроме того, я рекомендую не ловить каждое исключение (Exception e
), а скорее конкретные типы исключений, которые вы можете корректно обработать. Единственным исключением из этого может быть случай, когда вы перебрасываете исключение внутри catch - т.е. используете его в целях логирования, но при этом позволяете ему подниматься в стеке вызовов.
Да, он будет ловить 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...
}
Также, к вашему сведению, ApplicationException
как исключение, от которого можно отталкиваться, было устаревшим с .NET 2.0. Он никогда не предназначался в качестве исключения, которое можно было бы бросать самостоятельно, так что, вероятно, вам вообще не следует его использовать.
Да, catch будет ловить ваше ApplicationException, и да, это плохой стиль кодирования. Как хорошее общее правило, ловите только специфические исключения и те, с которыми вы собираетесь что-то делать, например, исправлять состояние приложения.