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.