CA1860: Undvik att använda tilläggsmetoden "Enumerable.Any()"
Property | Värde |
---|---|
Regel-ID | CA1860 |
Title | Undvik att använda tilläggsmetoden "Enumerable.Any()" |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Enumerable.Anyanropas på en typ som har egenskapen Length
, Count
eller IsEmpty
.
Regelbeskrivning
För att avgöra om en samlingstyp har några element är det mer effektivt och tydligare att använda Length
egenskaperna , Count
eller IsEmpty
(om möjligt) än att anropa Enumerable.Any metoden.
Any()
, som är en tilläggsmetod, använder språkintegrerad fråga (LINQ). Det är mer effektivt att förlita sig på samlingens egna egenskaper, och det klargör även avsikten.
Kommentar
Den här regeln liknar CA1827: Använd inte Count()/LongCount() när Any() kan användas. Den regeln gäller dock för Linq-metoden Count()
, medan den här regeln föreslår att du använder Count
egenskapen .
Så här åtgärdar du överträdelser
Ersätt ett anrop till Any() med ett anrop till samlingens Length
, Count
eller IsEmpty
egenskap.
Exempel
Följande kodfragment visar ett brott mot CA1860:
bool HasElements(string[] strings)
{
return strings.Any();
}
Function HasElements(strings As String()) As Boolean
Return strings.Any()
End Function
Följande kodfragment åtgärdar överträdelsen:
bool HasElements(string[] strings)
{
return strings.Length > 0;
}
Function HasElements(strings As String()) As Boolean
Return strings.Length > 0
End Function
När du ska ignorera varningar
Det är säkert att ignorera den här varningen om prestanda inte är ett problem.
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 CA1860
// The code that's violating the rule is on this line.
#pragma warning restore CA1860
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.CA1860.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.