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


CA2201: не вызывайте зарезервированные типы исключений

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, и создавайте исключения этого типа.

Устранение нарушений

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

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

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

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

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