Condividi tramite


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 rompente
Abilitato per impostazione predefinita in .NET 10 Come suggerimento
Linguaggi applicabili C# e Visual Basic

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 enumerano l'intera raccolta per calcolare il numero totale. 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 proprietà, mentre tale regola si applica al metodo di estensione Linq .

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.

Correzione del codice per CA1827 - Non usare Count() o LongCount() quando è possibile usare Any()

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

Vedi anche