CA1829: Utilizzare la proprietà Length/Count anziché il metodo Enumerable.Count
Proprietà | valore |
---|---|
ID regola | CA1829 |
Title | Usare la proprietà Length/Count invece del metodo Enumerable.Count |
Categoria | Prestazioni |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come suggerimento |
Causa
Il Count metodo LINQ è stato usato in un tipo che supporta un equivalente, più efficiente Length
o Count
proprietà.
Descrizione regola
Questa regola contrassegna le chiamate al Count metodo LINQ su raccolte di tipi che dispongono di proprietà equivalenti, ma più efficienti Length
o Count
per recuperare gli stessi dati. Length
o Count
la proprietà non enumera la raccolta, pertanto è più efficiente.
Questa regola contrassegna le Count chiamate ai tipi di raccolta seguenti con Length
la proprietà :
Questa regola contrassegna le Count chiamate ai tipi di raccolta seguenti con la Count
proprietà :
- System.Collections.ICollection
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IReadOnlyCollection<T>
I tipi di raccolta analizzati possono essere estesi in futuro per coprire più casi.
Come correggere le violazioni
Per correggere una violazione, sostituire la Count chiamata al metodo con l'uso dell'accesso alla Length
proprietà o Count
. Ad esempio, i due frammenti di codice seguenti mostrano una violazione della regola e come risolverli:
using System.Collections.Generic;
using System.Linq;
class C
{
public int GetCount(int[] array)
=> array.Count();
public int GetCount(ICollection<int> collection)
=> collection.Count();
}
using System.Collections.Generic;
class C
{
public int GetCount(int[] array)
=> array.Length;
public int GetCount(ICollection<int> collection)
=> collection.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 proprietà Lunghezza/Conteggio invece di Count() quando disponibile nell'elenco delle opzioni presentate.
Quando eliminare gli avvisi
È possibile eliminare una violazione di questa regola se non si è interessati all'impatto sulle prestazioni dall'enumerazione raccolta non necessaria per calcolare il conteggio.
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 CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829
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.CA1829.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Regole correlate
- CA1826: Utilizzare la proprietà anziché il metodo Linq Enumerable
- CA1827: Non usare Count/LongCount quando è possibile usare Any
- CA1828: Non usare CountAsync/LongCountAsync quando è possibile usare AnyAsync