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

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

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.

Siehe auch