CA1836: Preferuj isEmpty over Count,gdy jest dostępny
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1836 |
Tytuł | Preferuj metodę IsEmpty względem metody Count, jeśli jest dostępna |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Właściwość Count
lub Length
Count<TSource>(IEnumerable<TSource>) metoda rozszerzenia została użyta do określenia, czy obiekt zawiera jakiekolwiek elementy, porównując wartość z 0
wartością lub 1
, a obiekt ma bardziej wydajną IsEmpty
właściwość, która może być używana.
Opis reguły
Ta reguła flaguje wywołania Count
metod Count<TSource>(IEnumerable<TSource>) LongCount<TSource>(IEnumerable<TSource>) i Length
LINQ, gdy są używane do określenia, czy obiekt zawiera jakiekolwiek elementy, a obiekt ma bardziej wydajną IsEmpty
właściwość.
Analiza tej reguły pierwotnie pokrywała się z podobnymi regułami CA1827, CA1828 i CA1829; analizatory takich reguł zostały scalone wraz z analizatorem dla CA1836, aby zgłosić najlepszą diagnozę w przypadku nakładania się.
Jak naprawić naruszenia
Aby naprawić naruszenie, zastąp Count<TSource>(IEnumerable<TSource>) wywołanie metody lub LongCount<TSource>(IEnumerable<TSource>) dostęp do właściwości lub Length
Count
, gdy jest on używany w operacji, która określa, czy obiekt jest pusty z użyciem IsEmpty
dostępu do właściwości. Na przykład następujące dwa fragmenty kodu pokazują naruszenie reguły i sposób jego naprawy:
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;
}
Napiwek
Poprawka kodu jest dostępna dla tej reguły w programie Visual Studio. Aby go użyć, umieść kursor na naruszeniu i naciśnij Ctrl+. (kropka). Wybierz pozycję Preferuj element "IsEmpty" nad wartością "Count", aby określić, czy obiekt zawiera, czy nie ma żadnych elementów z listy przedstawionych opcji.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć naruszenie tej reguły, jeśli nie martwisz się o wpływ wydajności z niepotrzebnego wyliczenia elementów na obliczenie liczby.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1836.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Powiązane reguły
- CA1827: Nie używaj funkcji Count/LongCount, gdy można użyć dowolnego
- CA1828: Nie używaj funkcji CountAsync/LongCountAsync, gdy można użyć narzędzia AnyAsync
- CA1829: Użyj właściwości Length/Count zamiast metody Enumerable.Count