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.ThrowIfNull
o .
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.