Condividi tramite


CA1871: Non passare uno struct nullable a 'ArgumentNullException.ThrowIfNull'

Proprietà valore
ID regola CA1871
Title Non passare uno struct nullable a 'ArgumentNullException.ThrowIfNull'
Categoria Prestazioni
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 9 Come informazioni

Causa

Quando uno struct nullable, ad esempio o int?Guid?, viene passato a , viene sottoposto a ArgumentNullException.ThrowIfNullboxing a un oggetto, causando una riduzione delle prestazioni.

Descrizione regola

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

Come correggere le violazioni

Verificare la presenza di valori Null e generare manualmente .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à none su nel file di configurazione.

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

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