Condividi tramite


CA1871: Non passare una struttura nullable a 'ArgumentNullException.ThrowIfNull'

Proprietà Valore
ID della regola CA1871
Titolo Non passare uno struct nullable a 'ArgumentNullException.ThrowIfNull'
Categoria prestazioni
La correzione è di rottura o non interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 9 A titolo informativo

Causa

Quando una struttura nullable, ad esempio, int? o Guid?, viene passata a ArgumentNullException.ThrowIfNull, viene sottoposta a boxing in un oggetto, causando una penalità sulle prestazioni.

Descrizione regola

Per migliorare le prestazioni, è preferibile controllare la proprietà HasValue e generare manualmente un'eccezione piuttosto che passare uno struct nullable a ArgumentNullException.ThrowIfNull.

Come correggere le violazioni

Verifica la presenza di null e lancia manualmente il ArgumentNullException.

Esempio

Il frammento di codice seguente mostra una violazione di CA1871:

static void Print(int? value)
{
    ArgumentNullException.ThrowIfNull(value);
    Console.WriteLine(value.Value);
}

Il frammento di codice seguente corregge la violazione:

static void Print(int? value)
{
    if (!value.HasValue)
    {
        throw new ArgumentNullException(nameof(value));
    }

    Console.WriteLine(value.Value);
}

Quando eliminare gli avvisi

Se le prestazioni non sono un problema, è possibile eliminare questo avviso.

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 CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871

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

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

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