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 9 | 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>) Length
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 LongCount<TSource>(IEnumerable<TSource>) metodu Length
Count<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.
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.