CA1836: Prefer IsEmpty over Count indien beschikbaar
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1836 |
Titel | Prefer IsEmpty over Count indien beschikbaar |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
De Count
of eigenschap of Length
de Count<TSource>(IEnumerable<TSource>) extensiemethode is gebruikt om te bepalen of het object items bevat door de waarde te 0
vergelijken met of 1
, en het object heeft een efficiëntere IsEmpty
eigenschap die in plaats daarvan kan worden gebruikt.
Beschrijving van regel
Deze regel markeert de aanroepen naar de Count
en Length
eigenschappen of Count<TSource>(IEnumerable<TSource>) en LongCount<TSource>(IEnumerable<TSource>) LINQ-methoden wanneer ze worden gebruikt om te bepalen of het object items bevat en het object een efficiëntere IsEmpty
eigenschap heeft.
De analyse van deze regel overlapt oorspronkelijk met soortgelijke regels CA1827, CA1828 en CA1829; de analyse van dergelijke regels zijn samengevoegd met de analyse voor CA1836 om de beste diagnose te rapporteren in geval van overlapping.
Schendingen oplossen
Als u een schending wilt oplossen, vervangt u de Count<TSource>(IEnumerable<TSource>) aanroep of LongCount<TSource>(IEnumerable<TSource>) methodeaanroep of de toegang tot de Count
Length
eigenschap wanneer deze wordt gebruikt in een bewerking die bepaalt of het object leeg is met het gebruik van de IsEmpty
eigenschapstoegang. In de volgende twee codefragmenten ziet u bijvoorbeeld een schending van de regel en hoe u deze kunt oplossen:
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;
}
Tip
Er is een codeoplossing beschikbaar voor deze regel in Visual Studio. Als u deze wilt gebruiken, plaatst u de cursor op de schending en drukt u op Ctrl+. (punt). Kies Voorkeur 'IsEmpty' boven 'Aantal' om te bepalen of het object al dan niet items bevat uit de lijst met opties die worden weergegeven.
Wanneer waarschuwingen onderdrukken
Het is veilig om een schending van deze regel te onderdrukken als u zich geen zorgen maakt over de gevolgen voor de prestaties van onnodige opsomming van items om het aantal te berekenen.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1836.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Gerelateerde regels
- CA1827: Gebruik count/LongCount niet wanneer any kan worden gebruikt
- CA1828: Gebruik CountAsync/LongCountAsync niet wanneer AnyAsync kan worden gebruikt
- CA1829: de eigenschap Length/Count gebruiken in plaats van de methode Enumerable.Count