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