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


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

Свойство Значение
Идентификатор правила CA2201
Заголовок Не порождайте исключения зарезервированных типов
Категория Использование
Исправление является критическим или не критическим Критическое
Включен по умолчанию в .NET 8 No

Причина

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

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

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

Следующие типы исключений зарезервированы и должны вызываться только средой CLR:

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

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

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

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

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

Недопустимый аргумент Исключение
Ссылка null ArgumentNullException
За пределами допустимого диапазона значений (например, индекса для коллекции или списка) ArgumentOutOfRangeException
Недопустимое значение enum InvalidEnumArgumentException
Содержит формат, который не соответствует спецификациям параметров метода (например, строке формата для ToString(String)) FormatException
Что-то другое неправильно ArgumentException

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

Недопустимая операция Исключение
Операция недопустима для текущего состояния объекта. InvalidOperationException
Операция выполняется для объекта, который был удален. ObjectDisposedException
Операция не поддерживается (например, при переопределении Stream.Write в потоке, открытом для чтения). NotSupportedException
Преобразование приведет к переполнению (например, в явной перегрузке оператора приведения). OverflowException

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

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

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

Когда лучше отключить предупреждения

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