CA1826: Usar a propriedade em vez do método Linq Enumerable
Property | Valor |
---|---|
ID da regra | CA1826 |
Título | Usar a propriedade em vez do método Linq Enumerable |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Como sugestão |
Causa
O método LINQ Enumerable foi usado em um tipo que oferece suporte a uma propriedade equivalente e mais eficiente.
Descrição da regra
Essa regra sinaliza as chamadas do método LINQ Enumerable em coleções de tipos que têm propriedades equivalentes, mas mais eficientes, para buscar os mesmos dados.
Essa regra analisa os tipos de coleção que implementam IReadOnlyList<T>, mas não IList<T>.
Esse sinalizador de regra chama os seguintes métodos nestes tipos de coleção:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
Os tipos de coleção e métodos analisados podem ser estendidos no futuro, para abranger mais casos.
Como corrigir violações
Para corrigir uma violação, substitua a chamada do método Enumerable pelo acesso à propriedade. Por exemplo, os dois snippets de código a seguir mostram uma violação da regra e como corrigi-la:
using System;
using System.Collections.Generic;
using System.Linq;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list.First());
Console.Write(list.Last());
Console.Write(list.Count());
}
}
using System;
using System.Collections.Generic;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list[0]);
Console.Write(list[list.Count - 1]);
Console.Write(list.Count);
}
}
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 Usar Indexador na 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 de chamadas de método específicas Enumerable.
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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
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.CA1826.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Configurar código para analisar
Use a opção a seguir para configurar em quais partes da base de código essa regra deve ser executada.
Excluir os métodos FirstOrDefault e LastOrDefault
Você pode configurar essa regra para excluir os métodos Enumerable.FirstOrDefault e Enumerable.LastOrDefault da análise. Considere a exclusão desses métodos se a legibilidade for uma preocupação, já que o código que você escreveria para substituí-los não é facilmente legível. Para excluir esses métodos, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu projeto:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
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