Да, это хорошая практика ... что он делает, так это повторно генерирует то же исключение, которое он перехватил, сохраняя трассировку стека нетронутой.
Это означает «повторно выбросить это же исключение». Другими словами, продолжайте поднимать исключение до следующего блока try / catch.
Это полезно, если вы действительно не можете справиться с исключением на этом уровне, но хотите зарегистрировать, что исключение произошло.
К сожалению, многие люди думают, что «журнал и повторный запуск» должен выполняться на каждом уровне, что приводит к тому, что приложения работают медленно, имеют файлы журнала с каждым исключением, регистрируемые несколько раз, и часто никогда не обрабатывают исключение.
throw;
повторно генерирует исходное исключение. Это позволяет вам выполнить некоторые действия на текущем уровне, а затем распространить исключение вверх по стеку.
Если исключение является результатом деталей реализации, может быть более целесообразным использовать цепочку исключений, чтобы генерировать исключение, зависящее от домена, которое обертывает исходное исключение, чтобы скрыть ваших клиентов от деталей реализации и множества различных исключений. типы, чтобы поймать.
Если исключение имеет смысл для ваших клиентов, то его повторное создание - прекрасная практика.
Это хорошая практика (иногда). Это позволяет вам перехватить исключение, зарегистрировать его или определить, можно ли его обработать, а затем повторно выбросить, не теряя StackTrace.
Ваше исключение NullReferenceException возникло из-за того, что SporeLog
было нулевым
.