CA1836: Ziehen Sie "IsEmpty" gegenüber "Count" vor (falls verfügbar)
Eigenschaft | Wert |
---|---|
Regel-ID | CA1836 |
Titel | Ziehen Sie "IsEmpty" gegenüber "Count" vor (falls verfügbar) |
Kategorie | Leistung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Vorschlag |
Ursache
Die Count
- oder Length
-Eigenschaft oder die Count<TSource>(IEnumerable<TSource>)-Erweiterungsmethode wurde verwendet, um zu bestimmen, ob das Objekt Elemente enthält, indem der Wert mit 0
oder 1
verglichen wird, und das Objekt verfügt über eine effizientere IsEmpty
-Eigenschaft, die stattdessen verwendet werden kann.
Regelbeschreibung
Diese Regel markiert die Aufrufe der Count
- und Length
-Eigenschaft bzw. der Count<TSource>(IEnumerable<TSource>)- und LongCount<TSource>(IEnumerable<TSource>)-LINQ-Methode, wenn sie verwendet werden, um zu bestimmen, ob das Objekt Elemente enthält und das Objekt eine effizientere IsEmpty
-Eigenschaft aufweist.
Die Analyse dieser Regel wurde ursprünglich mit den ähnlichen Regeln CA1827, CA1828 und CA1829 überschrieben; die Analysen solcher Regeln wurden zusammen mit der für CA1836 zusammengeführt, um die beste Diagnose bei einer Überschneidung zu melden.
Behandeln von Verstößen
Um einen Verstoß zu beheben, ersetzen Sie den Count<TSource>(IEnumerable<TSource>)- oder LongCount<TSource>(IEnumerable<TSource>)-Methodenaufruf oder den Length
- oder Count
-Eigenschaftszugriff, wenn er in einem Vorgang verwendet wird, der bestimmt, ob das Objekt mit der Verwendung des IsEmpty
-Eigenschaftenzugriffs leer ist. Die folgenden beiden Codeausschnitte zeigen z. B. einen Verstoß gegen die Regel und wie dieser korrigiert werden kann:
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;
}
Tipp
Für diese Regel ist ein Codefix in Visual Studio verfügbar. Um ihn zu nutzen, muss der Cursor auf dem Verstoß platziert und Strg+. (Punkt) gedrückt werden. Wählen Sie „IsEmpty“ gegenüber „Count“ bevorzugen aus, um zu bestimmen, ob das Objekt Elemente aus der Liste der angezeigten Optionen enthält oder nicht.
Wann sollten Warnungen unterdrückt werden?
Es ist sicher, einen Verstoß gegen diese Regel zu unterdrücken, wenn Sie sich keine Gedanken über die Auswirkungen auf die Leistung der unnötigen Element Enumeration machen, um die Anzahl zu berechnen.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1836.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Ähnliche Regeln
- CA1827: Count/LongCount nicht verwenden, wenn Any verwendet werden kann.
- CA1828: CountAsync/LongCountAsync nicht verwenden, wenn AnyAsync verwendet werden kann.
- CA1829: Length/Count-Eigenschaft anstelle der Enumerable.Count-Methode verwenden.