Используя “Бросок” в catchblock (и ничто иное!) [дубликат]

7
задан Community 23 May 2017 в 12:27
поделиться

4 ответа

Да, это хорошая практика ... что он делает, так это повторно генерирует то же исключение, которое он перехватил, сохраняя трассировку стека нетронутой.

12
ответ дан 6 December 2019 в 06:35
поделиться

Это означает «повторно выбросить это же исключение». Другими словами, продолжайте поднимать исключение до следующего блока try / catch.

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

К сожалению, многие люди думают, что «журнал и повторный запуск» должен выполняться на каждом уровне, что приводит к тому, что приложения работают медленно, имеют файлы журнала с каждым исключением, регистрируемые несколько раз, и часто никогда не обрабатывают исключение.

9
ответ дан 6 December 2019 в 06:35
поделиться

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

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

Если исключение имеет смысл для ваших клиентов, то его повторное создание - прекрасная практика.

3
ответ дан 6 December 2019 в 06:35
поделиться

Это хорошая практика (иногда). Это позволяет вам перехватить исключение, зарегистрировать его или определить, можно ли его обработать, а затем повторно выбросить, не теряя StackTrace.

Ваше исключение NullReferenceException возникло из-за того, что SporeLog было нулевым .

3
ответ дан 6 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

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