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
:
- System.Collections.ICollection
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IReadOnlyCollection<T>
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.
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.
Regras relacionadas
- CA1826: Usar a propriedade em vez do método Linq Enumerable
- CA1827: Não usar Count/LongCount quando Any puder ser usado
- CA1828: Não usar CountAsync/LongCountAsync quando AnyAsync puder ser usado