Partilhar via


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
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

A Count propriedade or Length ou o método de extensão foi usado para determinar se o objeto contém ou não itens comparando o valor com 0 ou 1, e o Count<TSource>(IEnumerable<TSource>) objeto tem uma propriedade mais eficiente IsEmpty que poderia ser usada em vez disso.

Descrição da regra

Esta regra sinaliza as chamadas para os Count métodos e propriedades ou LongCount<TSource>(IEnumerable<TSource>) Count<TSource>(IEnumerable<TSource>) e LINQ quando eles são usados para determinar se o objeto contém itens e Length se o objeto tem uma propriedade mais eficienteIsEmpty.

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 relatar o melhor diagnóstico em caso de sobreposição.

Como corrigir violações

Para corrigir uma violação, substitua a Count<TSource>(IEnumerable<TSource>) chamada de método ou ou o acesso à propriedade ou LongCount<TSource>(IEnumerable<TSource>) Count quando for usado em uma operação que determina se o objeto está vazio com o IsEmpty uso do acesso à Length propriedade. 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 usá-lo, posicione o cursor sobre a violação e pressione Ctrl+. Escolha Preferir 'IsEmpty' em vez de 'Contar' para determinar se o objeto contém ou não itens da lista de opções apresentada.

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á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 para um arquivo, pasta ou projeto, defina sua severidade 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.

Consulte também