CA1826: Utilizzare la proprietà anziché il metodo Linq Enumerable
Proprietà | valore |
---|---|
ID regola | CA1826 |
Title | Usare la proprietà anziché il metodo Enumerable LINQ |
Categoria | Prestazioni |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come suggerimento |
Causa
Il Enumerable metodo LINQ è stato usato in un tipo che supporta una proprietà equivalente ed efficiente.
Descrizione regola
Questa regola contrassegna le chiamate al Enumerable metodo LINQ su raccolte di tipi con proprietà equivalenti ma più efficienti per recuperare gli stessi dati.
Questa regola analizza i tipi di raccolta che implementano IReadOnlyList<T> ma non IList<T>.
Questa regola contrassegna le chiamate ai metodi seguenti in questi tipi di raccolta:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
I metodi e i tipi di raccolta analizzati possono essere estesi in futuro per coprire più casi.
Come correggere le violazioni
Per correggere una violazione, sostituire la chiamata al metodo con l'accesso Enumerable alle proprietà. Ad esempio, i due frammenti di codice seguenti mostrano una violazione della regola e come risolverli:
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);
}
}
Suggerimento
Una correzione del codice è disponibile per questa regola in Visual Studio. Per usarlo, posizionare il cursore sulla violazione e premere CTRL+. (punto). Scegliere Usa indicizzatore dall'elenco delle opzioni presentate.
Quando eliminare gli avvisi
È possibile eliminare una violazione di questa regola se non si è interessati all'impatto sulle prestazioni da chiamate di metodo specifiche Enumerable .
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1826.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Configurare il codice da analizzare
Usare l'opzione seguente per configurare le parti della codebase in cui eseguire questa regola.
Escludere i metodi FirstOrDefault e LastOrDefault
È possibile configurare questa regola per escludere i metodi e Enumerable.LastOrDefault dall'analisiEnumerable.FirstOrDefault. È possibile escludere questi metodi se la leggibilità è un problema, poiché il codice che si scrive per sostituirli non è facilmente leggibile. Per escludere questi metodi, aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Regole correlate
- CA1827: Non usare Count/LongCount quando è possibile usare Any
- CA1828: Non usare CountAsync/LongCountAsync quando è possibile usare AnyAsync
- CA1829: Utilizzare la proprietà Length/Count anziché il metodo Enumerable.Count