Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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 łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Właściwość Count lub Length, albo metoda rozszerzenia Count<TSource>(IEnumerable<TSource>) została użyta do określenia, czy obiekt zawiera jakiekolwiek elementy, porównując wartość z 0 lub 1, a obiekt ma bardziej wydajną właściwość IsEmpty, która może być używana.
Opis reguły
Ta reguła flaguje wywołania właściwości Count i Length lub metod LINQ Count<TSource>(IEnumerable<TSource>) i LongCount<TSource>(IEnumerable<TSource>), gdy są używane do określenia, czy obiekt zawiera jakiekolwiek elementy, a obiekt ma wydajniejszą właściwość IsEmpty.
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 zapewnić najbardziej precyzyjne wyniki analizy w przypadku ich nakładania się.
Jak naprawić naruszenia
Aby naprawić naruszenie, zastąp wywołanie metody Count<TSource>(IEnumerable<TSource>) lub LongCount<TSource>(IEnumerable<TSource>) albo dostęp do właściwości Length lub Count w operacji określającej, czy obiekt jest pusty, użyciem dostępu do właściwości IsEmpty. 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;
}
Wskazówka
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 "IsEmpty" zamiast "Count", aby określić, czy obiekt zawiera jakiekolwiek elementy z przedstawionej listy opcji.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć naruszenie tej reguły, jeśli nie martwisz się o wpływ na wydajność związany z niepotrzebnym wyliczaniem elementów w celu obliczenia 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 Count/LongCount, gdy można użyć Any
- 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