CA1512: Użyj pomocniczej funkcji throw ArgumentOutOfRangeException

Właściwości Wartość
Identyfikator reguły CA1512
Tytuł Użyj narzędzia throw dla ArgumentOutOfRangeException
Kategoria Łatwość konserwacji
Poprawka łamiąca lub nienaruszająca Niełamliwy
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Kod sprawdza, czy argument jest mniejszy niż lub większy niż dana wartość, a następnie warunkowo zgłasza wartość ArgumentOutOfRangeException.

Opis reguły

Sprawdzanie argumentów ma znaczący wpływ na rozmiar kodu i często dominuje w kodzie dla małych funkcji i zestawów właściwości. Te kontrole uniemożliwiają inlinowanie i powodują znaczne zanieczyszczenie pamięci podręcznej instrukcji. Metody wspomagające rzucanie wyjątków, takie jak ArgumentOutOfRangeException.ThrowIfGreaterThan, są prostsze i bardziej wydajne niż bloki if tworzące nowe wystąpienie wyjątku.

Przykład

Poniższy fragment kodu przedstawia naruszenia 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));
}

Poniższy fragment kodu przedstawia poprawki:

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);
}

Jak naprawić naruszenia

if Zastąp blok zgłaszający wyjątek wywołaniem do jednej z następujących metod pomocnika zgłaszania:

Albo w Visual Studio skorzystać z menu żarówki, aby automatycznie naprawić kod.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć naruszenie tej reguły, jeśli nie martwisz się o konserwację kodu. Można również pominąć naruszenia, które są identyfikowane jako fałszywie dodatnie.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA1512
// The code that's violating the rule is on this line.
#pragma warning restore CA1512

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1512.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.