CA1836: Preferovat IsEmpty před Count, pokud je k dispozici

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 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.

Oprava kódu pro CA1836 – Preferujte isEmpty před count, abyste zjistili, jestli objekt obsahuje nebo neobsahuje žádné položky.

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.

Viz také