CA1829: Użyj właściwości Length/Count zamiast metody Enumerable.Count
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1829 |
Tytuł | Użyj właściwości Length/Count zamiast metody Enumerable.Count |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Metoda Count LINQ została użyta dla typu, który obsługuje równoważne, bardziej wydajne Length
lub Count
właściwości.
Opis reguły
Ta reguła flaguje Count wywołania metody LINQ dla kolekcji typów, które mają odpowiedniki, ale bardziej wydajne Length
lub Count
właściwości do pobrania tych samych danych. Length
lub Count
właściwość nie wylicza kolekcji, dlatego jest bardziej wydajna.
Ta reguła flaguje Count wywołania następujących typów kolekcji z właściwością Length
:
Ta reguła flaguje Count wywołania następujących typów kolekcji z właściwością Count
:
- System.Collections.ICollection
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IReadOnlyCollection<T>
Przeanalizowane typy kolekcji mogą zostać rozszerzone w przyszłości w celu pokrycia większej liczby przypadków.
Jak naprawić naruszenia
Aby naprawić naruszenie, zastąp Count wywołanie metody użyciem Length
dostępu do właściwości lub Count
. 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 int GetCount(int[] array)
=> array.Count();
public int GetCount(ICollection<int> collection)
=> collection.Count();
}
using System.Collections.Generic;
class C
{
public int GetCount(int[] array)
=> array.Length;
public int GetCount(ICollection<int> collection)
=> collection.Count;
}
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ę Użyj właściwości Długość/Liczba zamiast Count(), jeśli jest dostępna z listy przedstawionych opcji.
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 CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1829.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
- CA1827: Nie używaj funkcji Count/LongCount, gdy można użyć dowolnego
- CA1828: Nie używaj funkcji CountAsync/LongCountAsync, gdy można użyć narzędzia AnyAsync