Зачем перебрасывать исключения? - PullRequest
34 голосов
/ 22 сентября 2008

Я много раз видел следующий код:

try
{
    ... // some code
}
catch (Exception ex)
{
    ... // Do something
    throw new CustomException(ex);

    // or
    // throw;

    // or
    // throw ex;
}

Не могли бы вы объяснить цель повторного исключения? Следует ли шаблон / лучшие практики в обработке исключений? (Я где-то читал, что это называется «Caller Inform»?)

Ответы [ 13 ]

0 голосов
/ 22 сентября 2008

ОСНОВНАЯ ПРИЧИНА повторного выброса исключений состоит в том, чтобы оставить стек вызовов без изменений, чтобы вы могли получить более полное представление о том, что происходит, и последовательность вызовов.

0 голосов
/ 22 сентября 2008

Скорее всего, приложение будет перехватывать эти переброшенные исключения выше в стеке вызовов, поэтому перебрасывание их позволяет обработчику более высокого уровня перехватывать и обрабатывать их соответствующим образом. Для приложения довольно распространено иметь обработчик исключений верхнего уровня, который регистрирует или сообщает об ожиданиях.

Другая альтернатива заключается в том, что кодировщик был ленивым, и вместо того, чтобы отлавливать только набор исключений, которые они хотят обработать, они перехватили все, а затем перебросили только те, с которыми они фактически не могут справиться.

0 голосов
/ 22 сентября 2008

Пока я не начал использовать EntLib ExceptionBlock, я использовал их, чтобы регистрировать ошибки, прежде чем их выбросить. Немного неприятно, когда вы думаете, что я мог бы обработать их в этот момент, но в то время было лучше, чтобы они терпели неудачу в UAT (после их регистрации), а не покрывали текущую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...