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 | CA1827 |
| Tytuł | Nie używaj funkcji Count()/LongCount(), gdy można użyć funkcji Any() |
| 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
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 Countwłaściwości, podczas gdy ta zasada dotyczy metody Count()rozszerzenia Linq.
Jak naprawić naruszenia
Aby naprawić naruszenie, zastąp wywołanie metody Count lub LongCount metodą Any. 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";
}
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ę Nie używaj funkcji Count() ani LongCount(), gdy można użyć funkcji Any() z listy przedstawionych 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 kolekcji w celu obliczenia ilości.
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.
Powiązane reguły
- CA1826: Użyj właściwości zamiast metody Linq Enumerable
- 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()
- CA1860: Unikaj używania metody rozszerzenia "Enumerable.Any()"