CA1871: Nie przekazuj struktury zezwalającej na wartość null do 'ArgumentNullException.ThrowIfNull'
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.