CA1512: использование вспомогательной функции argumentOutOfRangeException
Свойство | Значение |
---|---|
Идентификатор правила | CA1512 |
Заголовок | Использование вспомогательного средства аргумента ArgumentOutOfRangeException |
Категория | Ремонтопригодность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Код проверяет, меньше ли аргумент или больше заданного значения, а затем условно вызывает ArgumentOutOfRangeExceptionисключение.
Описание правила
Проверки аргументов существенно влияют на размер кода и часто доминируют в коде для небольших функций и наборов свойств. Эти проверки предотвращают встраивание и вызывают существенное загрязнение кэша инструкций. Вспомогательные методы, такие как ArgumentOutOfRangeException.ThrowIfGreaterThan более простые и эффективные, чем if
блоки, которые создают новый экземпляр исключения.
Пример
В следующем фрагменте кода показаны нарушения CA1512:
void M(int arg)
{
if (arg is 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg < 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg <= 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg <= 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg < 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg > 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg >= 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg == 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg != 42)
throw new ArgumentOutOfRangeException(nameof(arg));
}
В следующем фрагменте кода показаны исправления:
void M(int arg)
{
ArgumentOutOfRangeException.ThrowIfZero(arg);
ArgumentOutOfRangeException.ThrowIfNegative(arg);
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(arg);
ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfLessThan(arg, 42);
ArgumentOutOfRangeException.ThrowIfGreaterThan(arg, 42);
ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfNotEqual(arg, 42);
}
Устранение нарушений
Замените if
блок, который вызывает исключение одним из следующих вспомогательных методов:
- ArgumentOutOfRangeException.ThrowIfZero<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfNegative<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfNegativeOrZero<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfLessThanOrEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfLessThan<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfGreaterThan<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfNotEqual<T>(T, T, String)
Кроме того, в Visual Studio используйте меню лампочки для автоматического исправления кода.
Когда лучше отключить предупреждения
Нарушение этого правила можно безопасно скрыть, если вы не беспокоитесь об удобстве обслуживания кода. Также можно игнорировать нарушения, если это ложноположительный результат.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1512
// The code that's violating the rule is on this line.
#pragma warning restore CA1512
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1512.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.