CA1836: Prefira IsEmpty em vez de Count quando disponível

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 8 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.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

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.

Confira também