Udostępnij za pośrednictwem


CA1836: Preferuj isEmpty zamiast 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 ł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.

Poprawka kodu dla ca1836 — preferuj element

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.

Zobacz też