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 způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 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, Count<TSource>(IEnumerable<TSource>)LengthLongCount<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 LongCount<TSource>(IEnumerable<TSource>) metodu LengthCount<TSource>(IEnumerable<TSource>)Count 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.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

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é