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


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

Обновлен: Ноябрь 2007

TypeName

DoNotRaiseReservedExceptionTypes

CheckId

CA2201

Категория

Microsoft.Usage

Критическое изменение

Критическое

Причина

Метод создает исключение слишком общего типа или типа, зарезервированного средой выполнения.

Описание правила

Указанные ниже типы исключений являются слишком общими, чтобы предоставлять пользователям исчерпывающую информацию.

Указанные ниже типы исключений являются зарезервированными и должны создаваться только средой CLR.

Не создавайте общих исключений

Создание в библиотеке или платформе исключения общего типа, такого как Exception или SystemException, вынуждает объекты-получатели перехватывать все исключения, в том числе неизвестные, способ обработки которых им не известен.

Вместо этого следует вызывать исключения производного типа, уже существующего в платформе, или создать собственный тип, производный от Exception.

Создание конкретных исключений

В представленной ниже таблице показаны параметры и исключения, которые следует вызывать при проверке параметров, в том числе параметры значения в методе установки свойства:

Описание параметра

Исключение

Ссылка null 

System.ArgumentNullException

Выход за пределы диапазона допустимых значений (например, индекса коллекции или списка)

System.ArgumentOutOfRangeException

Недопустимое значение enum

System.ComponentModel.InvalidEnumArgumentException

Содержит формат, который не соответствует спецификациям параметров метода (например, строке формата для метода ToString(String))

System.FormatException

Другие случаи недопустимых значений

System.ArgumentException

Если операция является недопустимой для текущего состояния объекта, создавайте исключение System.InvalidOperationException

Если операция выполняется для удаленного объекта, создавайте исключение System.ObjectDisposedException

Если операция не поддерживается (как, например, переопределенный метод Stream.Write в потоке, открытом для чтения), создавайте исключение System.NotSupportedException

Если преобразование приводит к переполнению (как, например, в явной перегрузке оператора приведения), создавайте исключение System.OverflowException

В других случаях рассмотрите возможность создания собственного типа, производного от Exception, и создавайте исключения этого типа.

Предотвращение нарушений

Чтобы устранить нарушение данного правила, замените тип создаваемых исключений на более конкретный тип, не зарезервированный в среде выполнения.

Отключение предупреждений

Не следует отключать вывод предупреждений для этого правила.

Связанные правила

Не перехватывайте типы общих исключений