Лучшие практики для ловли и переброска исключений.NET

Похоже, что вы ищете значение режима (статистический режим), посмотрите на Документы Apache для статистических функций.

279
задан Venkat 11 October 2018 в 23:41
поделиться

7 ответов

Способ сохранить отслеживание стека с помощью throw;, Это допустимо также

try {
  // something that bombs here
} catch (Exception ex)
{
    throw;
}

throw ex;, в основном похож на выдачу исключения от той точки, таким образом, отслеживание стека только пошло бы туда, где Вы выходите throw ex; оператор.

Mike также корректен, предполагая, что исключение позволяет Вам передавать исключение (который рекомендуется).

Karl Seguin имеет большая запись на обработке исключений в его основы программирования электронной книги также, который является большим чтением.

Редактирование: Рабочая ссылка на Основы Программирования PDF. Просто ищите текст "исключение".

260
ответ дан LW001 23 November 2019 в 02:02
поделиться

При выдаче нового исключения за начальным исключением, Вы сохраните начальное отслеживание стека также..

try{
} 
catch(Exception ex){
     throw new MoreDescriptiveException("here is what was happening", ex);
}
99
ответ дан Mike 23 November 2019 в 02:02
поделиться

Когда Вы throw ex, Вы по существу выдаете новое исключение и пропустите информацию об исходном отслеживании стека. throw предпочтительный метод.

20
ответ дан Forgotten Semicolon 23 November 2019 в 02:02
поделиться

Эмпирическое правило должно постараться не Ловить и Бросать основное Exception объект. Это вынуждает Вас быть немного более умными об исключениях; другими словами, у Вас должна быть явная выгода для SqlException так, чтобы Ваш код обработки не делал чего-то не так с NullReferenceException.

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

13
ответ дан swilliams 23 November 2019 в 02:02
поделиться

Можно также использовать:

try
{
// Dangerous code
}
finally
{
// clean up, or do nothing
}

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

3
ответ дан Erick B 23 November 2019 в 02:02
поделиться

Я определенно использовал бы:

try
{
    //some code
}
catch
{
    //you should totally do something here, but feel free to rethrow
    //if you need to send the exception up the stack.
    throw;
}

, Который сохранит Ваш стек.

3
ответ дан 1kevgriff 23 November 2019 в 02:02
поделиться

Вы всегда должны использовать "throw;" чтобы повторно выбросить исключения в .NET,

Обратитесь к этому, http://weblogs.asp.net/bhouse/archive/2004/11/30/272297.aspx

В основном MSIL (CIL) имеет две инструкции - «выбросить» и «повторно выбросить»:

  • C # "бросить экс;" компилируется в "throw"
  • C # из MSIL "throw;" - в МСИЛ "переброс"!

В принципе, я могу понять причину, по которой "throw ex" переопределяет трассировку стека.

9
ответ дан 23 November 2019 в 02:02
поделиться
Другие вопросы по тегам:

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