Partilhar via


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

Property valor
ID da regra CA1871
Título Não passe uma struct anulável para 'ArgumentNullException.ThrowIfNull'
Categoria Desempenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 9 Como informação

Motivo

Quando uma struct 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.ThrowIfNull.

Como corrigir violações

Verifique se há nulo e jogue 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 de 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.