Delen via


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.