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 9 | 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í Count
vlastnosti, zatímco toto pravidlo platí pro metodu rozšíření Linq Count()
.
Jak opravit porušení
Chcete-li opravit porušení, nahraďte Count volání metody metodou Any LongCount. 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í.
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.
Související pravidla
- CA1826: Místo metody Linq Enumerable použijte vlastnost
- CA1828: Nepoužívejte CountAsync/LongCountAsync, pokud je možné použít AnyAsync
- CA1829: Místo metody Enumerable.Count() použijte vlastnost Length/Count.
- CA1860: Nepoužívejte metodu rozšíření Enumerable.Any()