Freigeben über


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 zu Unterbrechungen oder bleibt funktionsfähig Untrennbar
Standardmäßig in .NET 10 aktiviert Als Vorschlag
Anwendbare Sprachen C# und Visual Basic

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 überschneidet sich ursprünglich mit den ähnlichen Regeln CA1827, CA1828 und CA1829; die Analyse-Engines solcher Regeln wurden zusammen mit der von CA1836 zusammengeführt, um bei Überschneidungen die beste Diagnose zu ermöglichen.

So beheben Sie Verstöße

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 es zu verwenden, setzen Sie den Cursor auf den Verstoß und drücken Sie Strg+. (Punkt). 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.

Codekorrektur für CA1836: „IsEmpty“ gegenüber „count“ bevorzugen, um zu bestimmen, ob das Objekt Elemente 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 Leistungsauswirkungen durch unnötige Auflistung von Elementen machen, um die Anzahl zu ermitteln.

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 auf none in der Konfigurationsdatei fest.

[*.{cs,vb}]
dotnet_diagnostic.CA1836.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch