Udostępnij za pośrednictwem


CA1871: Nie przekazuj struktury dopuszczalnej wartości null do klasy "ArgumentNullException.ThrowIfNull"

Właściwości Wartość
Identyfikator reguły CA1871
Tytuł Nie przekazuj struktury dopuszczalnej wartości null do klasy "ArgumentNullException.ThrowIfNull"
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Jako informacje

Przyczyna

Gdy na przykład int? struktura dopuszczana do wartości null lub Guid?jest przekazywana do ArgumentNullException.ThrowIfNullobiektu , jest ona w polu do obiektu, co powoduje karę za wydajność.

Opis reguły

Aby uzyskać lepszą wydajność, lepiej jest sprawdzić HasValue właściwość i ręcznie zgłosić wyjątek niż przekazać strukturę dopuszczaną do 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 dotyczące analizy kodu.