Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | Värde |
|---|---|
| Regel-ID | CA1829 |
| Title | Använd egenskapen Length/Count i stället för metoden Enumerable.Count |
| Kategori | Prestanda |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Som förslag |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Count LINQ-metoden användes på en typ som stöder en motsvarande och mer effektiv Length eller Count egenskap.
Regelbeskrivning
Den här regeln flaggar Count LINQ-metoden anropar samlingar av typer som har motsvarande, men mer effektiva Length eller Count egenskaper för att hämta samma data.
Length eller Count egenskapen räknar inte upp samlingen, därför är mer effektiv.
Den här regeln flaggar Count anrop på följande samlingstyper med Length egenskapen:
Den här regeln flaggar Count anrop på följande samlingstyper med Count egenskapen :
- System.Collections.ICollection
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IReadOnlyCollection<T>
De analyserade samlingstyperna kan utökas i framtiden för att omfatta fler fall.
Så här åtgärdar du överträdelser
För att åtgärda en överträdelse ersätter du metodanropet Count med att använda antingen Length- eller Count-egenskapsåtkomst. Följande två kodfragment visar till exempel ett brott mot regeln och hur du åtgärdar den:
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;
}
Tips
En kodkorrigering är tillgänglig för den här regeln i Visual Studio. Om du vill använda den placerar du markören på felet, tryck sedan på Ctrl+. (punkt). Välj Använd egenskapen Längd/Antal i stället för Count() när det är tillgängligt i listan över alternativ som visas.
När du ska ignorera varningar
Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om prestandapåverkan från onödig samlingsuppräkning för att beräkna antalet.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1829.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Relaterade regler
- CA1826: Använd egenskapen i stället för Linq Enumerable-metoden
- CA1827: Använd inte Count/LongCount när Any kan användas
- CA1828: Använd inte CountAsync/LongCountAsync när AnyAsync kan användas