Partilhar via


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

Property valor
ID da regra CA1829
Título Use a propriedade Length/Count em vez do método Enumerable.Count
Categoria Desempenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

O Count método LINQ foi usado em um tipo que suporta um equivalente, mais eficiente Length ou Count propriedade.

Descrição da regra

Esta regra sinaliza que o método LINQ chama coleções de tipos que Count têm equivalente, mas mais eficiente Length ou Count propriedade para buscar os mesmos dados. Length ou Count propriedade não enumera a coleção, portanto, é mais eficiente.

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

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

Os tipos de coleta analisados podem ser estendidos no futuro para abranger mais casos.

Como corrigir violações

Para corrigir uma violação, substitua a Count chamada de método pelo uso do ou acesso à LengthCount propriedade. 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 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;
}

Gorjeta

Uma correção de código está disponível para essa regra no Visual Studio. Para usá-lo, posicione o cursor sobre a violação e pressione Ctrl+. Escolha Usar 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 coleta desnecessária 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 CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829

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

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

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

Consulte também