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 | CA1836 |
| Title | Preferire IsEmpty a Count quando disponibile |
| Categoria | Prestazioni |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | 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 1e 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