На самом деле есть веская причина, по которой вы не видите подобные конструкции в рабочем коде.
Прежде всего, такая конструкция не может помочь вам уменьшить количество try
/ catch
пар в вашем коде (это должно быть очевидно). может помочь вам сократить количество catch
операторов для данного try
, поскольку вы можете просто перехватить System.Exception
и перейти к ExceptionHandler
...
Но что дальше?
Каждое исключение должно обрабатываться по-разному.Как ExceptionHandler
точно знает, что делать?Вы можете попытаться решить эту проблему несколькими способами, например:
- Получите из
ExceptionHandler
и поместите код для обработки исключений в виртуальные методы - Передайте число
Action<Exception>
экземпляры к обработчику и вызовите его
Решение (1) будет хуже, чем у вас было раньше: теперь вам нужно создать целый новый класс для каждого блока try
ипереопределите кучу методов, чтобы в итоге получить что-то на хуже , чем у вас было раньше (не сразу понятно, как код в определенном классе вписывается в поток вашей программы).Это также оставило бы другой важный вопрос без ответа: вам может понадобиться контекст (доступ к переменным в текущей области видимости), чтобы правильно обработать исключение.Как вы предоставите доступ к этому контексту?
Решение (2) на самом деле будет очень похоже на написание блоков catch
, которых мы хотели бы избежать (каждый Action
фактически будет содержимымcatch
блока).В конечном итоге мы делаем то же самое, только более сложным и многословным образом.
Есть и другие проблемы:
- Что должен сделать
ExceptionHandler
, если он не может обработать исключение?Бросив его еще раз, вы потеряете исходную трассировку стека, фактически уничтожив всю полезную информацию. - Что если в
ExceptionHandler
есть ошибка?Вы можете перефразировать try
/ catch
.Можете ли вы доверять коду, который вы написали сами, в той же степени?
Что касается ExceptionThrower
... какое преимущество оно может предложить по сравнению с throw new Exception();
?
Обработка исключений заключается вэто уже сложный вопрос, и это достаточно сложно сделать правильно, не добавляя дополнительные механизмы к машине.Особенно, если они не купят тебе ничего нового. Не делай этого.