Udostępnij za pośrednictwem


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.

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 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.

Zobacz też