CA1829: Usar a propriedade Length/Count em vez do método Enumerable.Count

Property Valor
ID da regra CA1829
Título Usar a propriedade Length/Count em vez do método Enumerable.Count
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 LINQ Count foi usado em um tipo que dá suporte a uma propriedade Length ou Count equivalente e mais eficiente.

Descrição da regra

Essa regra sinaliza as chamadas do método LINQ Count em coleções de tipos que têm propriedades Length e Count equivalentes, mas mais eficientes, para buscar os mesmos dados. A propriedade Length ou Count não enumera a coleção, portanto, é mais eficiente.

Essa regra sinaliza chamadas Count nos seguintes tipos de coleção com propriedade Length:

Essa regra sinaliza chamadas Count nos seguintes tipos de coleção com a propriedade Count:

Os tipos de coleção analisados podem ser estendidos no futuro para abranger mais casos.

Como corrigir violações

Para corrigir uma violação, substitua a chamada de método Count pelo uso do acesso à propriedade Length ou Count. 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 int GetCount(int[] array)
        => array.Count();

    public int GetCount(ICollection<int> collection)
        => collection.Count();
}
using System.Collections.Generic;

class C
{
    public int GetCount(int[] array)
        => array.Length;

    public int GetCount(ICollection<int> collection)
        => collection.Count;
}

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 Usar a propriedade Length/Count em vez de Count() quando disponível na lista de opções apresentada.

Code fix for CA1829 - Use Length/Count property instead of Count() when available

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

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.CA1829.severity = none

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

Confira também