Compartilhar via


CA1860: evite usar o método de extensão 'Enumerable.Any()'

Property Valor
ID da regra CA1860
Título Evite usar o método de extensão "Enumerable.Any()"
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 10 Como sugestão

Causa

Enumerable.Anyé chamado em um tipo que tem uma propriedade , , orLengthCount

Descrição da regra

Para determinar se um tipo de coleção tem algum elemento, é mais eficiente e claro usar as propriedades Length, Count ou IsEmpty (se possível) do que chamar o método Enumerable.Any.

Any(), que é um método de extensão, usa LINQ (consulta integrada à linguagem). É mais eficiente confiar nas próprias propriedades da coleção e também esclarece a intenção.

Observação

Essa regra é semelhante a CA1827: não usar Count()/LongCount() quando Any() puder ser usado. No entanto, essa regra se aplica ao métodoCount(), enquanto essa regra sugere o uso da Countpropriedade.

Como corrigir violações

Substitua uma chamada para Any() com uma chamada para a propriedade Length, Count ou IsEmpty da coleção.

Exemplo

O seguinte snippet de código mostra uma violação do CA1860:

bool HasElements(string[] strings)
{
    return strings.Any();
}
Function HasElements(strings As String()) As Boolean
    Return strings.Any()
End Function

O seguinte snippet de código conserta a violação:

bool HasElements(string[] strings)
{
    return strings.Length > 0;
}
Function HasElements(strings As String()) As Boolean
    Return strings.Length > 0
End Function

Quando suprimir avisos

É seguro fechar esse aviso se o desempenho não é uma preocupação.

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 CA1860
// The code that's violating the rule is on this line.
#pragma warning restore CA1860

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.CA1860.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.