Упаковка любого фрагмента кода в блоке try
/ catch
без веской причины - плохая практика.
В модели программирования .NETИсключения должны быть зарезервированы для действительно исключительных случаев или условий.Вы должны только пытаться отловить исключения, которые вы можете сделать с .Более того, вам вряд ли стоит когда-либо перехватывать базовый класс System.Exception
(но лучше предпочитать перехватывать более конкретные, производные классы исключений, которые вы можете обрабатывать).И если во время выполнения вашей программы возникнет действительно неожиданное исключение, вы на самом деле должны аварийно завершить работу.
Очевидно, что «правильный» ответ должен быть сделан в каждом конкретном случае.в зависимости от ситуации, в зависимости от того, что происходит внутри этого // code
заполнителя в вашем catch
блоке.Но если вы просите общее правило или «наилучшую практику», у вас всегда должна быть конкретная причина ловить исключения, а не просто заключать весь код в гигантский блок try
/ catch
как само собой разумеющееся.не думая об этом.
Обратите внимание, что если вы просто пытаетесь перехватить любые необработанные исключения, которые могут возникнуть в целях ведения журнала или сообщения об ошибках, вам следует использовать событие AppDomain.UnhandledException
.Это событие только для уведомлений, поэтому оно не позволяет вам обрабатывать этих исключений, но это правильное место для реализации вашей функции ведения журналов или отчетов об ошибках после сбоя приложения.
РЕДАКТИРОВАТЬ: Когда я начал читать превосходный блог Рэймонда Чена, "The Old New Thing" , я заметил, что он недавно опубликовал статью опохожая тема.Он специфичен для COM, а не для .NET Framework, но общие концепции обработки ошибок одинаково применимы к обеим средам.Я думал, что я разделю несколько драгоценных камней из статьи здесь, в поддержку моего [по-видимому, весьма спорным] мнение.
Исторически COM разместили гигантский попробовать / за исключением вокруг методов вашего сервера.Если ваш сервер столкнулся с тем, что обычно было бы необработанным исключением, гигантский попытка / исключение перехватит его и превратит в ошибку RPC_E_SERVERFAULT
.Затем он пометил исключение как обработанное, чтобы сервер продолжал работать, тем самым «улучшая надежность, поддерживая работу сервера даже при возникновении проблемы».
Имейте в виду, это фактически было медвежьей услугой.
Тот факт, что произошло необработанное исключение, означает, что сервер находился в непредвиденном состоянии.Перехватывая исключение и говоря: «Не волнуйтесь, все хорошо», вы в конечном итоге оставляете поврежденный сервер включенным.
[.,,]
Для перехвата всех исключений и продолжения процесса предполагается, что сервер может восстановиться после непредвиденного сбоя.Но это абсурд.Вы уже знаете, что сервер невостребованный тост: он разбился!
Гораздо лучше позволить серверу дать сбой, чтобы аварийный дамп мог быть захвачен в момент сбоя.Теперь у вас есть реальный шанс выяснить, что происходит.
Вы можете [и должны] прочитать всю статью здесь в его блоге: Как отключить обработчик исключений этого COM "Полезно "обвивает ваш сервер .