CA1826: Use a propriedade em vez do método Linq Enumerable
Property | valor |
---|---|
ID da regra | CA1826 |
Título | Use a propriedade em vez do método Linq Enumerable |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como sugestão |
Motivo
O Enumerable método LINQ foi usado em um tipo que suporta uma propriedade equivalente e mais eficiente.
Descrição da regra
Esta regra sinaliza que o método LINQ chama coleções de tipos que Enumerable têm propriedades equivalentes, mas mais eficientes, para buscar os mesmos dados.
Esta regra analisa os tipos de coleção que implementam IReadOnlyList<T> , mas não IList<T>o .
Esta regra sinaliza chamadas para os seguintes métodos nesses 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 e métodos de coleta analisados podem ser estendidos no futuro para abranger mais casos.
Como corrigir violações
Para corrigir uma violação, substitua a chamada de método pelo acesso à Enumerable propriedade. Por exemplo, os dois trechos 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);
}
}
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 Usar indexador na lista de opções apresentada.
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
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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1826.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Configurar código para análise
Use a opção a seguir para configurar em quais partes da base de código executar essa regra.
Excluir os métodos FirstOrDefault e LastOrDefault
Você pode configurar essa regra para excluir os Enumerable.FirstOrDefault métodos e Enumerable.LastOrDefault da análise. Você pode considerar excluir esses 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 conexas
- CA1827: Não use Count/LongCount quando algum pode ser usado
- CA1828: Não use CountAsync/LongCountAsync quando AnyAsync pode ser usado
- CA1829: Use a propriedade Length/Count em vez do método Enumerable.Count