CA1871: Não passe uma struct anulável para 'ArgumentNullException.ThrowIfNull'

Propriedade Valor
ID da regra CA1871
Título Não passe uma struct anulável para 'ArgumentNullException.ThrowIfNull'
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 9 Como informação

Causa

Quando uma estrutura anulável, por exemplo, int? ou Guid?, é passada para ArgumentNullException.ThrowIfNull, ela é encaixotada em um objeto, causando uma penalidade de desempenho.

Descrição da regra

Para melhorar o desempenho, é melhor verificar a HasValue propriedade e lançar manualmente uma exceção do que passar uma struct anulável para ArgumentNullException.ThrowIfNullo .

Como corrigir violações

Verifique se há null e lance o ArgumentNullException manualmente.

Exemplo

O trecho de código a seguir mostra uma violação de CA1871:

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

O seguinte snippet de código conserta a violação:

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

    Console.WriteLine(value.Value);
}

Quando suprimir avisos

É seguro fechar esse aviso se o desempenho não é uma preocupação.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira Como suprimir avisos de análise de código.