CA1827: Nepoužívejte Count()/LongCount(), když je možné použít any()

Vlastnost Hodnota
ID pravidla CA1827
Název Nepoužívejte Count()/LongCount(), pokud lze použít any()
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Byla použita metoda Count() nebo LongCount(), kde by byla metoda Any() efektivnější.

Popis pravidla

Toto pravidlo označuje volání metody LINQ Count() a LongCount(), která se používají ke kontrole, jestli kolekce obsahuje aspoň jeden prvek. Tyto metody vytvoří výčet celé kolekce pro výpočet počtu. Stejná kontrola je rychlejší s metodou Any(), protože zabraňuje vytvoření výčtu kolekce.

Poznámka:

Toto pravidlo se podobá CA1860: Nepoužívejte metodu rozšíření Enumerable.Any(). Toto pravidlo však navrhuje použití Countvlastnosti, zatímco toto pravidlo platí pro metodu rozšíření LinqCount().

Jak opravit porušení

Chcete-li opravit porušení, nahraďte Count volání metody metodou AnyLongCount. Například následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:

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";
}

Tip

Oprava kódu je k dispozici pro toto pravidlo v sadě Visual Studio. Pokud ho chcete použít, umístěte kurzor na porušení a stiskněte ctrl+. (tečka). Zvolte Možnost Nepoužívat počet() nebo LongCount(), pokud je možné použít any () ze seznamu zobrazených možností.

Code fix for CA1827 - Do not use Count() or LongCount() when Any() can be used

Kdy potlačit upozornění

Je bezpečné potlačit porušení tohoto pravidla, pokud vás nezajímá dopad na výkon z nepotřebného výčtu kolekce pro výpočet počtu.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA1827.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také