Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1829 |
| Title | Usare la proprietà Length/Count invece del metodo Enumerable.Count |
| Categoria | Prestazioni |
| La correzione causa un'interruzione o meno | Non rompente |
| Abilitato per impostazione predefinita in .NET 10 | Come suggerimento |
| Linguaggi applicabili | C# e Visual Basic |
Causa
Il metodo Count LINQ è stato usato su un tipo che supporta una proprietà equivalente e più efficiente Length o Count.
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 chiamate Count sui seguenti tipi di raccolta con la proprietà Length:
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 chiamata al metodo Count utilizzando l'accesso alla proprietà Length 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 l'opzione Usa la proprietà Lunghezza/Conteggio invece di Count() quando disponibile dall'elenco presentato.
Quando eliminare gli avvisi
È possibile ignorare una violazione di questa regola se non ci si preoccupa dell'impatto sulle prestazioni dovuto all'enumerazione inutile della raccolta per determinare 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