CA1871: Skicka inte en nullbar struct till "ArgumentNullException.ThrowIfNull"
Property | Värde |
---|---|
Regel-ID | CA1871 |
Title | Skicka inte en nullbar struct till "ArgumentNullException.ThrowIfNull" |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som information |
Orsak
När en nullbar struct, till exempel, int?
eller Guid?
, skickas till ArgumentNullException.ThrowIfNull
, boxas den till ett objekt, vilket orsakar en prestandastraff.
Regelbeskrivning
För bättre prestanda är det bättre att kontrollera HasValue
egenskapen och manuellt generera ett undantag än att skicka en nullbar struct till ArgumentNullException.ThrowIfNull
.
Så här åtgärdar du överträdelser
Sök efter null och kasta ArgumentNullException manuellt.
Exempel
Följande kodfragment visar ett brott mot CA1871:
static void Print(int? value)
{
ArgumentNullException.ThrowIfNull(value);
Console.WriteLine(value.Value);
}
Följande kodfragment åtgärdar överträdelsen:
static void Print(int? value)
{
if (!value.HasValue)
{
throw new ArgumentNullException(nameof(value));
}
Console.WriteLine(value.Value);
}
När du ska ignorera varningar
Det är säkert att ignorera den här varningen om prestanda inte är ett problem.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.