Бөлісу құралы:


CA1512: Используйте вспомогательную функцию выброса ArgumentOutOfRangeException

Свойство Значение
Идентификатор правила CA1512
Заголовок Используйте вспомогательную функцию выброса ArgumentOutOfRangeException
Категория Ремонтопригодность
Исправление является критическим или не критическим Неразрывное
Включен по умолчанию в .NET 10 Как предложение
Применимые языки C# и Visual Basic

Причина

Код проверяет, меньше ли аргумент или больше заданного значения, а затем условно генерирует 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, который вызывает исключение, вызовом одного из следующих вспомогательных методов для выброса исключений:

Кроме того, в 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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.