Рассмотрим следующий код (ASP.NET/C#):
private void Application_Start(object sender, EventArgs e)
{
if (!SetupHelper.SetUp())
{
throw new ShitHitFanException();
}
}
Я никогда не колебался, просто бросить свой собственный тип исключения, в основном потому, что я нашел (плохая практика или нет).) что в основном разумное имя описательного типа дает нам как разработчикам достаточно, чтобы знать, что произошло и почему что-то могло произойти.Иногда существующие типы исключений .NET даже удовлетворяют эти потребности - независимо от сообщения.
В этом конкретном сценарии, только для демонстрационных целей, приложение должно умереть ужасной, позорной смертью, если SetUp
не завершится должным образом (как продиктовано его возвращаемым значением), но я не могу найти уже существующий тип исключения в .NET, который может показаться достаточным;хотя, я уверен, что один будет там и я просто не знаю об этом.
Брэд Абрамс опубликовал эту статью, в которой перечислены некоторые из доступных типов исключений .Я говорю несколько, потому что статья написана в 2005 году, и, хотя я стараюсь идти в ногу со временем, это более чем правдоподобное предположение, что в будущие версии фреймворка было добавлено больше, о которых я до сих пор не знаю.Конечно, Visual Studio предоставляет хорошо отформатированный, прокручиваемый список исключений с помощью Intellisense - но даже анализируя их, я не нахожу ни одного, который может показаться достаточным для этой ситуации ...
ApplicationException: ... при возникновении нефатальной ошибки приложения
Имя кажется разумным, но ошибка совершенно определенно фатальная - приложение не работает.
ExecutionEngineException: ... когда есть внутренняя ошибка в механизме исполнения CLR
Опять же, звучит разумно, поверхностно;но это имеет вполне определенную цель, и выручить меня здесь, конечно же, не так.
HttpApplicationException: ... при возникновении ошибки при обработке HTTP-запроса
Итак, мы запускаем приложение ASP.NET!Но мы также просто потянем за соломинку.
InvalidOperationException: ... когда вызов недопустим для текущего состояния экземпляра
Это не правильно, но я добавляю его в список «возможно, если вы положите пистолет мне в голову, да».
OperationCanceledException: ...при отмене операции, которую выполнял поток
Возможно, я бы не чувствовал себя так плохо, используя эту, но я все равно буду угонять эту чертову вещь с небольшим правом.
Вы могли бы даже спросить, с какой стати я хотел бы выдвинуть здесь исключение, но идея состоит в том, чтобы выяснить, что если бы я сделал это , то знаете ли вы оподходящее исключение для такого сценария?И в основном, в какой степени мы можем использовать .NET, придерживаясь рациональности?