CA1871: не передайте структуру, допускаемую значение NULL, в "ArgumentNullException.ThrowIfNull"
Свойство | Значение |
---|---|
Идентификатор правила | CA1871 |
Заголовок | Не передайте структуру, допускаемую значение NULL, в "ArgumentNullException.ThrowIfNull" |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как сведения |
Причина
При передаче ArgumentNullException.ThrowIfNull
в объект структуры, допускающей значение NULL, int?
например или Guid?
, он упаковается в объект, что приводит к штрафу производительности.
Описание правила
Для повышения производительности лучше проверка HasValue
свойству и вручную вызвать исключение, чем передать структуру, допускаемую ArgumentNullException.ThrowIfNull
значение NULL.
Устранение нарушений
Проверьте значение NULL и создайте ArgumentNullException его вручную.
Пример
В следующем фрагменте кода показано нарушение CA1871:
static void Print(int? value)
{
ArgumentNullException.ThrowIfNull(value);
Console.WriteLine(value.Value);
}
Следующий фрагмент кода исправляет нарушение.
static void Print(int? value)
{
if (!value.HasValue)
{
throw new ArgumentNullException(nameof(value));
}
Console.WriteLine(value.Value);
}
Когда лучше отключить предупреждения
Это предупреждение безопасно подавлять, если производительность не является проблемой.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.