Partilhar via


CA1827: Não use Count()/LongCount() quando pode usar Any()

Propriedade valor
ID da regra CA1827
Título Não use Count()/LongCount() quando Any() puder ser usado
Categoria Desempenho
A correção causa interrupção ou não Ininterrupto
Habilitado por padrão no .NET 10 Como sugestão
Línguas aplicáveis C# e Visual Basic

Motivo

O método Count() ou LongCount()foi usado onde o método Any() seria mais eficiente.

Descrição da regra

Esta regra sinaliza chamadas de método LINQ Count() e LongCount() que são 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 evita enumerar a coleção.

Nota

Esta regra é semelhante à CA1860: evite usar o método de extensão 'Enumerable.Any()'. No entanto, essa regra sugere o uso da Countpropriedade, enquanto esta regra se aplica ao Count()método de extensão.

Como corrigir violações

Para corrigir uma violação, substitua a chamada de método Count ou LongCount pelo método Any. Por exemplo, os dois trechos 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";
}

Gorjeta

Uma correção de código está disponível para essa regra no Visual Studio. Para utilizá-lo, posicione o cursor sobre a violação e pressione Ctrl+. Escolha Não usar Count() ou LongCount() quando Any() puder ser usado na lista de opções apresentada.

Correção de código para CA1827 - Não use Count() ou LongCount() quando Any() pode ser usado

Quando suprimir avisos

É seguro suprimir uma violação desta regra se não estiver preocupado com o impacto no desempenho resultante da enumeração desnecessária da coleção para calcular a contagem.

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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1827.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também