CA1836: Preferire IsEmpty rispetto al conteggio quando disponibile
Proprietà | valore |
---|---|
ID regola | CA1836 |
Title | Preferire IsEmpty a Count quando disponibile |
Categoria | Prestazioni |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come suggerimento |
Causa
La Count
proprietà o Length
o il Count<TSource>(IEnumerable<TSource>) metodo di estensione è stato utilizzato per determinare se l'oggetto contiene o meno elementi confrontando il valore con 0
o 1
e l'oggetto dispone di una proprietà più efficiente IsEmpty
che potrebbe essere utilizzata.
Descrizione regola
Questa regola contrassegna le chiamate alle Count
proprietà e Length
o Count<TSource>(IEnumerable<TSource>) ai LongCount<TSource>(IEnumerable<TSource>) metodi LINQ quando vengono utilizzati per determinare se l'oggetto contiene elementi e l'oggetto ha una proprietà più efficiente IsEmpty
.
L'analisi di questa regola originariamente sovrapposta a regole simili CA1827, CA1828 e CA1829; gli analizzatori di tali regole sono stati uniti insieme a quello per CA1836 per segnalare la diagnosi migliore in caso di sovrapposizione.
Come correggere le violazioni
Per correggere una violazione, sostituire la chiamata al Count<TSource>(IEnumerable<TSource>) metodo o LongCount<TSource>(IEnumerable<TSource>) o l'accesso alla Length
proprietà o Count
quando viene utilizzata in un'operazione che determina se l'oggetto è vuoto con l'uso dell'accesso alla IsEmpty
proprietà. Ad esempio, i due frammenti di codice seguenti mostrano una violazione della regola e come risolverli:
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.IsEmpty;
}
Suggerimento
Una correzione del codice è disponibile per questa regola in Visual Studio. Per usarlo, posizionare il cursore sulla violazione e premere CTRL+. (punto). Scegliere Preferi 'IsEmpty' su 'Count' per determinare se l'oggetto contiene o meno elementi dall'elenco di opzioni presentate.
Quando eliminare gli avvisi
È possibile eliminare una violazione di questa regola se non si è interessati all'impatto sulle prestazioni dall'enumerazione degli elementi non necessari 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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
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.CA1836.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
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