Поделиться через


Использование стандартных типов исключений

Замечание

Это содержимое перепечатывается разрешением 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.

См. также