Share via


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

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 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.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

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