Udostępnij za pośrednictwem


CA1827: Nie używaj funkcji Count()/LongCount(), gdy można użyć funkcji Any()

Właściwości Wartość
Identyfikator reguły CA1827
Tytuł Nie używaj funkcji Count()/LongCount(), gdy można użyć funkcji Any()
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Jako sugestia

Przyczyna

Użyto metody Count() lub LongCount(), w której metoda Any() byłaby bardziej wydajna.

Opis reguły

Ta reguła flaguje wywołania metod Count() i LongCount() LINQ, które są używane do sprawdzania, czy kolekcja ma co najmniej jeden element. Te metody wyliczają całą kolekcję, aby obliczyć liczbę. To samo sprawdzanie jest szybsze w przypadku metody Any(), ponieważ pozwala uniknąć wyliczania kolekcji.

Uwaga

Ta reguła jest podobna do CA1860: Unikaj używania metody rozszerzenia "Enumerable.Any()". Jednak ta reguła sugeruje użycie właściwości , podczas gdy ta reguła ma zastosowanie do metody rozszerzenia Linq Count() .Count

Jak naprawić naruszenia

Aby naprawić naruszenie, zastąp Count wywołanie Any metody or LongCount metodą metodą . Na przykład następujące dwa fragmenty kodu pokazują naruszenie reguły i sposób jego naprawy:

using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Count() != 0 ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Any() ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.Any() ? "Not empty" : "Empty";
}

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ę Nie używaj funkcji Count() ani LongCount(), gdy można użyć funkcji Any() z listy przedstawionych opcji.

Poprawka kodu dla ca1827 — nie używaj funkcji Count() ani LongCount(), gdy można użyć funkcji Any()

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 kolekcji 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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1827.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też