CA1827: Gebruik niet Count()/LongCount() wanneer Any() kan worden gebruikt
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1827 |
Titel | Gebruik Count()/LongCount() niet wanneer Any() kan worden gebruikt |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
De methode Count() of LongCount() is gebruikt waarbij de Any()-methode efficiënter zou zijn.
Beschrijving van regel
Deze regel markeert Count() en LongCount() LINQ-methode aanroepen die worden gebruikt om te controleren of de verzameling ten minste één element heeft. Met deze methoden wordt de hele verzameling opgesomd om het aantal te berekenen. Dezelfde controle is sneller met de Any() -methode, omdat hiermee wordt voorkomen dat de verzameling wordt opgesomd.
Notitie
Deze regel is vergelijkbaar met CA1860: Vermijd het gebruik van de extensiemethode Enumerable.Any(). Deze regel stelt echter voor om de Count
eigenschap te gebruiken, terwijl deze regel van toepassing is op de Linq-extensiemethodeCount()
.
Schendingen oplossen
Als u een schending wilt oplossen, vervangt u de Count aanroep of LongCount methode door de Any methode. In de volgende twee codefragmenten ziet u bijvoorbeeld een schending van de regel en hoe u deze kunt oplossen:
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";
}
Tip
Er is een codeoplossing beschikbaar voor deze regel in Visual Studio. Als u deze wilt gebruiken, plaatst u de cursor op de schending en drukt u op Ctrl+. (punt). Kies Niet Count() of LongCount() gebruiken wanneer Any() kan worden gebruikt in de lijst met opties die worden weergegeven.
Wanneer waarschuwingen onderdrukken
Het is veilig om een schending van deze regel te onderdrukken als u zich geen zorgen maakt over de gevolgen voor de prestaties van onnodige inventarisatie van verzamelingen om het aantal te berekenen.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1827.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Gerelateerde regels
- CA1826: Eigenschap gebruiken in plaats van Linq Enumerable-methode
- CA1828: Gebruik CountAsync/LongCountAsync niet wanneer AnyAsync kan worden gebruikt
- CA1829: de eigenschap Length/Count gebruiken in plaats van de methode Enumerable.Count()
- CA1860: Vermijd het gebruik van de extensiemethode Enumerable.Any()