Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1827 |
| Název | Nepoužívejte Count()/LongCount(), pokud lze použít any() |
| Kategorie | Výkon |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
| Příslušné jazyky | C# a Visual Basic |
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 rozšiřující metodu Enumerable.Any(). Toto pravidlo však navrhuje použití vlastnosti
Jak opravit porušení
Chcete-li opravit porušení, nahraďte volání metody Count nebo LongCount metodou Any. 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 chybu a stiskněte
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()