Partilhar via


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

Propriedade Valor
ID da regra CA1871
Título Não passe uma estrutura anulável para a função 'ArgumentNullException.ThrowIfNull'
Categoria Performance
correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 9 Como informação

Causa

Quando uma struct anulável, como int? ou Guid?, é passada para ArgumentNullException.ThrowIfNull, é convertida em um objeto, o que resulta numa penalização de desempenho.

Descrição da regra

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

Como corrigir violações

Verifique se é nulo 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 trecho 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 apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua gravidade 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.