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, 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 vlastnost Count nebo Length, a také rozšiřující metoda Count<TSource>(IEnumerable<TSource>) k určení, zda objekt obsahuje jakékoli položky, porovnáním hodnoty s 0 nebo 1, a objekt má efektivnější vlastnost IsEmpty, kterou by bylo možné využít místo toho.
Popis pravidla
Toto pravidlo označí volání vlastností Count a Length nebo metod LINQ Count<TSource>(IEnumerable<TSource>) a LongCount<TSource>(IEnumerable<TSource>), pokud se používají k určení, zda objekt obsahuje nějaké položky, a přitom objekt má efektivnější vlastnost IsEmpty.
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í metody Count<TSource>(IEnumerable<TSource>) nebo LongCount<TSource>(IEnumerable<TSource>) či přístup k vlastnosti Length nebo Count, pokud se používá v operaci, která určuje, zda je objekt prázdný, použitím přístupu k vlastnosti IsEmpty. 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 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ý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 Count/LongCount, pokud lze použít Any
- CA1828: Nepoužívejte CountAsync/LongCountAsync, pokud je možné použít AnyAsync
- CA1829: Místo metody Enumerable.Count použijte vlastnost Length/Count.