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.