CA1836: Föredrar IsEmpty framför Antal när det är tillgängligt
Property | Värde |
---|---|
Regel-ID | CA1836 |
Title | Föredra IsEmpty framför Antal när det är tillgängligt |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
- Count
egenskapen eller Length
Count<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 anropen Count
till egenskaperna och Length
eller Count<TSource>(IEnumerable<TSource>) linq-metoderna LongCount<TSource>(IEnumerable<TSource>) när de används för att avgöra om objektet innehåller några objekt och objektet har en effektivare 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
Om du vill åtgärda en överträdelse ersätter du metodanropet eller egenskapen eller Count
när det används i en åtgärd som avgör om objektet är tomt med hjälp av egenskapsåtkomstenIsEmpty
.Count<TSource>(IEnumerable<TSource>) LongCount<TSource>(IEnumerable<TSource>) Length
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;
}
Dricks
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å överträdelsen och trycker 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.
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.
Relaterade regler
- CA1827: Använd inte Count/LongCount när alla kan användas
- CA1828: Använd inte CountAsync/LongCountAsync när AnyAsync kan användas
- CA1829: Använd egenskapen Length/Count i stället för metoden Enumerable.Count