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 | CA1836 |
| Título | Prefira usar IsEmpty em vez de Count quando disponível |
| 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
A propriedade Count ou Length ou o método de extensão Count<TSource>(IEnumerable<TSource>) foi utilizado para determinar se o objeto contém ou não itens, comparando o valor com 0 ou 1. Contudo, o objeto possui uma propriedade mais eficiente, IsEmpty, que poderia ser usada em vez disso.
Descrição da regra
Esta regra sinaliza as chamadas para as propriedades Count e Length ou os métodos LINQ Count<TSource>(IEnumerable<TSource>) e LongCount<TSource>(IEnumerable<TSource>) quando eles são usados para determinar se o objeto contém algum item e se possui uma propriedade IsEmpty mais eficiente.
A análise desta regra, originalmente, se sobrepunha às regras semelhantes CA1827, CA1828 e CA1829; os analisadores de tais regras foram fundidos com o de CA1836 para fazer o melhor diagnóstico em casos de sobreposição.
Como corrigir violações
Para corrigir uma violação, substitua a chamada de método Count<TSource>(IEnumerable<TSource>) ou LongCount<TSource>(IEnumerable<TSource>) ou o acesso à propriedade Length ou Count quando for usado em uma operação que determina se o objeto está vazio, pelo acesso à propriedade IsEmpty. Por exemplo, os dois trechos de código a seguir mostram uma violação da regra e como corrigi-la:
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.IsEmpty;
}
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 Prefira 'IsEmpty' ao invés de 'Count' para determinar se o objeto contém itens ou não da 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 itens 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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1836.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Regras conexas
- CA1827: Não use Count/LongCount quando Any pode ser usado
- CA1828: Não use CountAsync/LongCountAsync quando AnyAsync pode ser usado
- CA1829: Use a propriedade Length/Count em vez do método Enumerable.Count