Dela via


CA1827: Använd inte Count()/LongCount() när Any() kan användas

Egenskap Värde
Regel-ID CA1827
Title Använd inte Count()/LongCount() när Any() kan användas
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

Metoden Count() eller LongCount()användes där metoden Any() skulle vara effektivare.

Regelbeskrivning

Den här regeln flaggar LINQ-metodanrop för Count() och LongCount() som används för att kontrollera om samlingen har minst ett element. Dessa metoder räknar upp hela samlingen för att beräkna antalet. Samma kontroll går snabbare med metoden Any() eftersom den undviker att räkna upp samlingen.

Kommentar

Den här regeln liknar CA1860: Undvik att använda tilläggsmetoden "Enumerable.Any()". Denna regel föreslår däremot att använda Countegenskapen, medan den här regeln gäller för Linq-Count()tilläggsmetoden.

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

Om du vill åtgärda en överträdelse ersätter du metodanropet Count eller LongCount med Any -metoden. 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 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";
}

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 inte Count() eller LongCount() när Any() kan användas i listan över alternativ som visas.

Kodkorrigering för CA1827 – Använd inte Count() eller LongCount() när Any() kan användas

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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827

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.CA1827.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även