Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.
В этом разделе описываются стандартные исключения, предоставляемые платформой, и сведения об их использовании. Список не является исчерпывающим. Обратитесь к справочной документации о .NET Framework для использования других типов исключений Framework.
Исключение и системное исключение (SystemException)
❌НЕ бросайте System.Exception или System.SystemException.
❌ НЕ перехватывать System.Exception
или System.SystemException
в коде фреймворка, если вы не собираетесь выбросить его снова.
❌ Избегайте ловить System.Exception
или System.SystemException
, за исключением в обработчиках исключений верхнего уровня.
ApplicationException
❌ НЕ используйте или наследуйте от ApplicationException.
Исключение недопустимой операции
✔️ Выбросьте InvalidOperationException, если объект находится в неподходящем состоянии.
ArgumentException, ArgumentNullException и ArgumentOutOfRangeException
✔️ Выполните вызов ArgumentException или один из его подтипов, если плохие аргументы передаются члену. При необходимости предпочитайте наиболее производный тип исключения.
✔️ Задайте свойство ParamName
, когда выбрасывается один из подклассов ArgumentException
.
Это свойство представляет имя параметра, вызвавшего исключение. Обратите внимание, что свойство можно задать с помощью одной из перегрузок конструктора.
✔️ DO используется value
для имени неявного параметра значения наборов свойств.
NullReferenceException, IndexOutOfRangeException и AccessViolationException
❌ НЕ разрешайте общедоступным вызываемым API явно или неявно создавать NullReferenceException, AccessViolationExceptionили IndexOutOfRangeException. Эти исключения зарезервированы и создаются подсистемой выполнения, и в большинстве случаев указывают на ошибку.
Выполните проверку аргументов, чтобы избежать возникновения этих исключений. Бросание этих исключений раскрывает детали реализации вашего метода, которые могут изменяться со временем.
StackOverflowException
❌ Не вызывайте StackOverflowExceptionявным образом. Исключение должно быть явно создано только средой CLR.
❌ НЕ перехватывать StackOverflowException
.
Практически невозможно написать управляемый код, который остается согласованным в присутствии произвольных переполнений стека. Неуправляемые части среды CLR остаются согласованными с помощью зондов для перемещения переполнения стека в четко определенные места, а не откатом от случайных переполнений стека.
OutOfMemoryException
❌ Не вызывайте OutOfMemoryExceptionявным образом. Это исключение выбрасывается только инфраструктурой CLR.
ComException, SEHException и ExecutionEngineException
❌НЕ вызывайте COMException, ExecutionEngineException и SEHException явно. Эти исключения должны генерироваться только инфраструктурой CLR.
© Часть 2005, 2009 Корпорация Майкрософт. Все права защищены.
Перепечатан с разрешения Pearson Education, Inc. из Руководство по проектированию: Соглашения, идиомы и шаблоны для повторного использования библиотек .NET, 2-е издание Кшиштоф Чвалина и Брэд Абрамс, опубликованное 22 октября 2008 года Addison-Wesley Профессиональный в рамках серии разработки Microsoft Windows.