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 | CA1836 |
| Název | Upřednostňovat IsEmpty před Count, pokud je k dispozici |
| 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 10 | Jako návrh |
Příčina
Byla Count použita nebo Length vlastnost nebo Count<TSource>(IEnumerable<TSource>) rozšiřující metoda k určení, zda objekt obsahuje jakékoli položky porovnáním hodnoty 0 nebo 1, a objekt má efektivnější IsEmpty vlastnost, která by mohla být použita.
Popis pravidla
Toto pravidlo označí volání Count metod LINQ a vlastnosti, LengthCount<TSource>(IEnumerable<TSource>)LongCount<TSource>(IEnumerable<TSource>) pokud se používají k určení, zda objekt obsahuje nějaké položky a objekt má efektivnější IsEmpty vlastnost.
Analýza tohoto pravidla se původně překrývala s podobnými pravidly CA1827, CA1828 a CA1829; analyzátory těchto pravidel byly sloučeny spolu s analyzátorem pro CA1836, aby v případě překrývání hlásily nejlepší diagnózu.
Jak opravit porušení
Chcete-li opravit porušení, nahraďte volání nebo Count<TSource>(IEnumerable<TSource>) metodu LongCount<TSource>(IEnumerable<TSource>)LengthCount nebo přístup k vlastnosti při použití v operaci, která určuje, zda je objekt prázdný s použitím IsEmpty přístupu k vlastnosti. Například následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:
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;
}
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). Pokud chcete určit, jestli objekt obsahuje nebo neobsahuje žádné položky ze seznamu zobrazených možností, zvolte Preferovat IsEmpty než Count.
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ých výčtů položek 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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
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.CA1836.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Související pravidla
- CA1827: Nepoužívejte Počet/LongCount, pokud lze použít libovolnou možnost
- CA1828: Nepoužívejte CountAsync/LongCountAsync, pokud je možné použít AnyAsync
- CA1829: Místo metody Enumerable.Count použijte vlastnost Length/Count.