Udostępnij za pośrednictwem


CA1871: Nie przekazuj struktury zezwalającej na wartość null do 'ArgumentNullException.ThrowIfNull'

Własność Wartość
identyfikator reguły CA1871
Tytuł Nie przekazuj struktury nullable do metody 'ArgumentNullException.ThrowIfNull'
Kategoria wydajność
Poprawka jest przerywająca lub nieprzerywająca Niezgodność
włączone domyślnie na platformie .NET 9 Jako informacja

Przyczyna

Gdy nullable struktura, na przykład int? lub Guid?, jest przekazywana do ArgumentNullException.ThrowIfNull, jest przechowywana jako obiekt, co powoduje spadek wydajności.

Opis reguły

Aby uzyskać lepszą wydajność, lepiej jest sprawdzić właściwość HasValue i ręcznie zgłosić wyjątek, niż przekazywać strukturę z wartością null do ArgumentNullException.ThrowIfNull.

Jak naprawić naruszenia

Sprawdź wartość null i ręcznie wyrzuć ArgumentNullException.

Przykład

Poniższy fragment kodu przedstawia naruszenie CA1871.

static void Print(int? value)
{
    ArgumentNullException.ThrowIfNull(value);
    Console.WriteLine(value.Value);
}

Poniższy fragment kodu naprawia naruszenie:

static void Print(int? value)
{
    if (!value.HasValue)
    {
        throw new ArgumentNullException(nameof(value));
    }

    Console.WriteLine(value.Value);
}

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć to ostrzeżenie, jeśli wydajność nie jest problemem.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji .

[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia analizy kodu.