Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Property | Valor |
|---|---|
| ID da regra | CA1836 |
| Título | Prefira IsEmpty em vez de Count quando disponível |
| Categoria | Desempenho |
| Correção interruptiva ou sem interrupção | Sem interrupção |
| Habilitado por padrão no .NET 10 | Como sugestão |
Causa
A propriedade Count ou Length ou o método de extensão Count<TSource>(IEnumerable<TSource>) foi usado para determinar se o objeto contém ou não itens comparando o valor com 0 ou 1 e o objeto possui uma propriedade IsEmpty mais eficiente que pode ser usada.
Descrição da regra
Essa regra sinaliza as chamadas para as propriedades Count e Length ou os métodos do LINQ Count<TSource>(IEnumerable<TSource>) e LongCount<TSource>(IEnumerable<TSource>) quando são utilizados para determinar se o objeto contém algum item e o objeto possui uma propriedade IsEmpty mais eficiente.
A análise dessa regra originalmente se sobrepôs a regras semelhantes CA1827, CA1828 e CA1829, e os analisadores dessas regras foram mesclados com os da CA1836 para relatar o melhor diagnóstico em caso 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 de propriedade Length ou Count quando for utilizado em uma operação que determinará se o objeto estará vazio com o uso do acesso de propriedade IsEmpty. Por exemplo, os dois snippets 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;
}
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 Preferir 'IsEmpty' em vez de 'Count' para determinar se o objeto contém ou não itens da lista de opções apresentadas.
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ários 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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
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.CA1836.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Regras relacionadas
- CA1827: Não usar Count/LongCount quando Any puder ser usado
- CA1828: Não usar CountAsync/LongCountAsync quando AnyAsync puder ser usado
- CA1829: Usar a propriedade Length/Count em vez do método Enumerable.Count