Condividi tramite


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 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.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

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.

Vedi anche