CA1512: Usare l'helper throw ArgumentOutOfRangeException

Proprietà valore
ID regola CA1512
Title Usare l'helper throw ArgumentOutOfRangeException
Categoria Gestibilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

Il codice controlla se un argomento è minore o maggiore di un valore specificato e quindi genera un'eccezione in modo condizionale ArgumentOutOfRangeException.

Descrizione regola

I controlli degli argomenti hanno un impatto sostanziale sulle dimensioni del codice e spesso dominano il codice per funzioni e setter di proprietà di piccole dimensioni. Questi controlli impediscono l'inlining e causano un notevole inquinamento da cache delle istruzioni. I metodi helper throw, ad ArgumentOutOfRangeException.ThrowIfGreaterThan esempio, sono più semplici ed efficienti rispetto ai if blocchi che costruiscono una nuova istanza di eccezione.

Esempio

Il frammento di codice seguente mostra le violazioni di 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));
}

Il frammento di codice seguente mostra le correzioni:

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

Come correggere le violazioni

Sostituire il if blocco che genera l'eccezione con una chiamata a uno dei seguenti metodi throw-helper:

In alternativa, in Visual Studio, usare il menu lampadina per correggere automaticamente il codice.

Quando eliminare gli avvisi

È possibile eliminare una violazione di questa regola se non si è preoccupati per la manutenibilità del codice. È anche bene eliminare le violazioni identificate come falsi positivi.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.