Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| 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.