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.ThrowIfNull
boxing 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.