Compartilhar via


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

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

Causa

Quando um struct anulável, por exemplo, int? ou Guid?, é passado para ArgumentNullException.ThrowIfNull, ele é encapsulado em um objeto, causando uma penalidade de desempenho.

Descrição da regra

Para melhorar o desempenho, é melhor verificar a propriedade HasValue e gerar manualmente uma exceção do que passar uma estrutura anulável para ArgumentNullException.ThrowIfNull.

Como corrigir violações

Verifique se há valor nulo e gere o ArgumentNullException manualmente.

Exemplo

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

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

O snippet de código a seguir corrige a violação:

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

    Console.WriteLine(value.Value);
}

Quando suprimir avisos

É seguro suprimir esse aviso se o desempenho não for uma preocupação.

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, insira diretivas de pré-processador no arquivo de origem para 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 de um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração .

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

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