CA1836: Föredrar IsEmpty framför Antal när det är tillgängligt

Egenskap Värde
Regel-ID CA1836
Title Föredra IsEmpty framför Antal när det är tillgängligt
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 egenskapen eller LengthCount<TSource>(IEnumerable<TSource>) tilläggsmetoden användes för att avgöra om objektet innehåller några objekt genom att jämföra värdet med 0 eller 1, och objektet har en effektivare IsEmpty egenskap som kan användas i stället.

Regelbeskrivning

Den här regeln flaggar anrop till egenskaperna Count och Length, eller LINQ-metoderna Count<TSource>(IEnumerable<TSource>) och LongCount<TSource>(IEnumerable<TSource>), när de används för att avgöra om objektet innehåller några enheter och objektet har en mer effektiv IsEmpty-egenskap.

Analysen av den här regeln överlappade ursprungligen med liknande regler CA1827, CA1828 och CA1829. analysverktygen för sådana regler sammanfogades tillsammans med den för CA1836 för att rapportera den bästa diagnosen vid överlappning.

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

För att åtgärda en överträdelse ersätter du metodanropen Count<TSource>(IEnumerable<TSource>) eller LongCount<TSource>(IEnumerable<TSource>), eller egenskapsåtkomst Length eller Count när de används i en operation som avgör om objektet är tomt, med användning av egenskapsåtkomsten IsEmpty. Följande två kodfragment visar till exempel ett brott mot regeln och hur du åtgärdar den:

using System.Collections.Concurrent;

class C
{
    ConcurrentQueue<int> _queue;
    public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;

class C
{
    ConcurrentQueue<int> _queue;
    public bool IsEmpty => _queue.IsEmpty;
}

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 Föredrar "IsEmpty" framför "Count" för att avgöra om objektet innehåller eller inte några objekt från listan över alternativ som visas.

Kodkorrigering för CA1836 – Föredrar

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

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

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

Se även