CA1512: Použijte pomocnou funkci 'throw helper' pro ArgumentOutOfRangeException

Vlastnost Hodnota
ID pravidla CA1512
Název Použít pomocnou funkci ArgumentOutOfRangeException pro vyvolání výjimky
Kategorie Udržovatelnost
Oprava, která může být destruktivní nebo nedestruktivní Nepřerušované
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Kód zkontroluje, zda je argument menší nebo větší než daná hodnota, a pak podmíněně vyvolá ArgumentOutOfRangeException.

Popis pravidla

Kontroly argumentů mají významný dopad na velikost kódu a často dominují kódu pro malé funkce a setter vlastností. Tyto kontroly brání inliningu a způsobují značné zahlušení instrukční cache. Pomocné metody, jako ArgumentOutOfRangeException.ThrowIfGreaterThan jsou jednodušší a efektivnější než if bloky, které vytváří novou instanci výjimky.

Příklad

Následující fragment kódu ukazuje porušení 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));
}

Následující fragment kódu ukazuje opravy:

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 opravit porušení

Nahraďte blok if, který vyvolá výjimku, voláním jedné z následujících metod throw-helper:

Nebo v sadě Visual Studio použijte nabídku s žárovkou pro automatickou opravu kódu.

Kdy potlačit upozornění

Pokud vás nezajímá udržovatelnost kódu, je bezpečné potlačit porušení tohoto pravidla. Je také v pořádku potlačit porušení, která jsou identifikována jako falešně pozitivní.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.