CA1871: Geef geen null-struct door aan 'ArgumentNullException.ThrowIfNull'
Eigenschap | Waarde |
---|---|
Regel-ID | CA1871 |
titel | Geef geen null-struct door aan 'ArgumentNullException.ThrowIfNull' |
Categorie | prestatie- |
Fix is brekend of niet-brekend | Niet-brekend |
standaard ingeschakeld in .NET 9 | Als informatie |
Oorzaak
Wanneer een null-struct, bijvoorbeeld int?
of Guid?
, wordt doorgegeven aan ArgumentNullException.ThrowIfNull
, wordt deze in een object geplaatst, waardoor een prestatiestraf wordt opgelegd.
Beschrijving van regel
Voor verbeterde prestaties is het beter om de eigenschap HasValue
te controleren en handmatig een uitzondering te genereren dan een null-struct door te geven aan ArgumentNullException.ThrowIfNull
.
Hoe schendingen op te lossen
Controleer op null en gooi de ArgumentNullException handmatig.
Voorbeeld
In het volgende codefragment ziet u een schending van CA1871:
static void Print(int? value)
{
ArgumentNullException.ThrowIfNull(value);
Console.WriteLine(value.Value);
}
Met het volgende codefragment wordt de schending opgelost:
static void Print(int? value)
{
if (!value.HasValue)
{
throw new ArgumentNullException(nameof(value));
}
Console.WriteLine(value.Value);
}
Wanneer waarschuwingen onderdrukken
Het is veilig om deze waarschuwing te onderdrukken als de prestaties geen probleem zijn.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none
in het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none
Voor meer informatie, zie Hoe codeanalysewaarschuwingen te onderdrukken.