CA1827: Non usare Count()/LongCount() quando è possibile usare Any()
Proprietà | valore |
---|---|
ID regola | CA1827 |
Title | Non usare Count()/LongCount() quando è possibile usare Any() |
Categoria | Prestazioni |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come suggerimento |
Causa
Il metodo Count() o LongCount() è stato usato in cui il metodo Any() sarebbe più efficiente.
Descrizione regola
Questa regola contrassegna le chiamate al metodo LINQ Count() e LongCount() usate per verificare se la raccolta ha almeno un elemento. Questi metodi enumerare l'intera raccolta per calcolare il conteggio. Lo stesso controllo è più veloce con il metodo Any() perché evita di enumerare la raccolta.
Nota
Questa regola è simile a CA1860: evitare di usare il metodo di estensione 'Enumerable.Any()'. Tuttavia, tale regola suggerisce l'uso della Count
proprietà , mentre questa regola si applica al metodo di estensione Linq Count()
.
Come correggere le violazioni
Per correggere una violazione, sostituire la chiamata al Count metodo o LongCount con il Any metodo . 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 string M1(IEnumerable<string> list)
=> list.Count() != 0 ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;
class C
{
public string M1(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
}
Suggerimento
Una correzione del codice è disponibile per questa regola in Visual Studio. Per usarlo, posizionare il cursore sulla violazione e premere CTRL+. (punto). Scegliere Non usare Count() o LongCount() quando è possibile usare Any() dall'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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827
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.CA1827.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
- CA1828: Non usare CountAsync/LongCountAsync quando è possibile usare AnyAsync
- CA1829: Utilizzare la proprietà Length/Count anziché il metodo Enumerable.Count()
- CA1860: Evitare di usare il metodo di estensione 'Enumerable.Any()'