CA1836: Prefira IsEmpty em vez de Count quando disponível
Property | Valor |
---|---|
ID da regra | CA1836 |
Título | Prefira IsEmpty em vez de Count quando disponível |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
A propriedade Count
ou Length
ou o método de extensão Count<TSource>(IEnumerable<TSource>) foi usado para determinar se o objeto contém ou não itens comparando o valor com 0
ou 1
e o objeto possui uma propriedade IsEmpty
mais eficiente que pode ser usada.
Descrição da regra
Essa regra sinaliza as chamadas para as propriedades Count
e Length
ou os métodos do LINQ Count<TSource>(IEnumerable<TSource>) e LongCount<TSource>(IEnumerable<TSource>) quando são utilizados para determinar se o objeto contém algum item e o objeto possui uma propriedade IsEmpty
mais eficiente.
A análise dessa regra originalmente se sobrepôs a regras semelhantes CA1827, CA1828 e CA1829, e os analisadores dessas regras foram mesclados com os da CA1836 para relatar o melhor diagnóstico em caso de sobreposição.
Como corrigir violações
Para corrigir uma violação, substitua a chamada de método Count<TSource>(IEnumerable<TSource>) ou LongCount<TSource>(IEnumerable<TSource>) ou o acesso de propriedade Length
ou Count
quando for utilizado em uma operação que determinará se o objeto estará vazio com o uso do acesso de propriedade IsEmpty
. Por exemplo, os dois snippets de código a seguir mostram uma violação da regra e como corrigi-la:
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.IsEmpty;
}
Dica
Uma correção de código está disponível para essa regra no Visual Studio. Para usá-la, posicione o cursor sobre a violação e pressione Ctrl+. (ponto). Escolha Preferir 'IsEmpty' em vez de 'Count' para determinar se o objeto contém ou não itens da lista de opções apresentadas.
Quando suprimir avisos
É seguro suprimir uma violação dessa regra se você não estiver preocupado com o impacto no desempenho da enumeração de itens desnecessários para calcular a contagem.
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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
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.CA1836.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Regras relacionadas
- CA1827: Não usar Count/LongCount quando Any puder ser usado
- CA1828: Não usar CountAsync/LongCountAsync quando AnyAsync puder ser usado
- CA1829: Usar a propriedade Length/Count em vez do método Enumerable.Count