Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | valor |
|---|---|
| ID da regra | CA1829 |
| Título | Utilize-se a propriedade Length/Count em vez do método Enumerable.Count |
| 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 Count método LINQ foi usado num tipo que suporta um Length ou Count propriedade equivalente e mais eficiente, respectivamente.
Descrição da regra
Esta regra sinaliza as chamadas de método Count LINQ em coleções de tipos que têm uma Length ou Count propriedade equivalente, mas mais eficiente, para obter os mesmos dados.
Length ou Count propriedade não enumera a coleção, portanto, é mais eficiente.
Esta regra sinaliza chamadas nos seguintes tipos de coleção Count que têm a propriedade Length:
Esta regra sinaliza chamadas nos seguintes tipos de coleções com a propriedade Count.
- System.Collections.ICollection
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IReadOnlyCollection<T>
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 chamada de método Count pelo uso do acesso às propriedades Length ou Count. 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 utilizá-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.
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 CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade 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.
Regras conexas
- CA1826: Use a propriedade em vez do método Linq Enumerable
- CA1827: Não use Count/LongCount quando Any pode ser usado
- CA1828: Não use CountAsync/LongCountAsync quando AnyAsync pode ser usado