CA1827: não usar Count()/LongCount() quando Any() puder ser usado
Property | Valor |
---|---|
ID da regra | CA1827 |
Título | Não use Count()/LongCount() quando Any() puder ser usado |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
O método Count() ou LongCount() foi usado onde o método Any() seria mais eficiente.
Descrição da regra
Essa regra sinaliza as chamadas de método LINQ Count() e LongCount() usadas para verificar se a coleção tem pelo menos um elemento. Esses métodos enumeram toda a coleção para calcular a contagem. A mesma verificação é mais rápida com o método Any(), pois ele evita enumerar a coleção.
Observação
Essa regra é semelhante a CA1860: evite usar o método de extensão 'Enumerable.Any()'. No entanto, essa regra sugere o uso da Count
propriedade, enquanto essa regra se aplica ao método de extensão Linq Count()
.
Como corrigir violações
Para corrigir uma violação, substitua a chamada de método Countou LongCount pelo método Any. Por exemplo, os dois snippets de código a seguir mostram uma violação da regra e como corrigi-la:
using System.Collections.Generic;
using System.Linq;
class C
{
public string M1(IEnumerable<string> list)
=> list.Count() != 0 ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;
class C
{
public string M1(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
}
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 Não usar Count() ou LongCount() quando Any() puder ser usado na lista de opções apresentada.
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 coleção desnecessária 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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827
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.CA1827.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Regras relacionadas
- CA1826: Usar a propriedade em vez do método Linq Enumerable
- CA1828: Não usar CountAsync/LongCountAsync quando AnyAsync puder ser usado
- CA1829: usar a propriedade Length/Count em vez do método Enumerable.Count()
- CA1860: evite usar o método de extensão 'Enumerable.Any()'