CA1512: Použití pomocné rutiny ArgumentOutOfRangeException
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1512 |
Název | Použití pomocné rutiny vyvolání výjimky ArgumentOutOfRangeException |
Kategorie | Udržovatelnost |
Oprava způsobující chybu nebo chybu způsobující chybu | Nepřerušované |
Povoleno ve výchozím nastavení v .NET 8 | Jako návrh |
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é znečištění mezipaměti instrukcemi. 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í
if
Nahraďte blok, který vyvolá výjimku voláním některé z následujících metod throw-helper:
- 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)
Nebo v sadě Visual Studio pomocí nabídky žárovky opravte kód automaticky.
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.