Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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 10 | 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.