Share via


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 8 Som förslag

Orsak

Enumerable.Anyanropas på en typ som har egenskapen Length, Counteller IsEmpty.

Regelbeskrivning

För att avgöra om en samlingstyp har några element är det mer effektivt och tydligare att använda Lengthegenskaperna , Counteller 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-metodenCount(), medan den här regeln föreslår att du använder Countegenskapen .

Så här åtgärdar du överträdelser

Ersätt ett anrop till Any() med ett anrop till samlingens Length, Counteller 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.