CA1827: Count()/LongCount() nicht verwenden, wenn Any() verwendet werden kann

Eigenschaft Wert
Regel-ID CA1827
Titel Count()/LongCount() nicht verwenden, wenn Any() verwendet werden kann
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 LongCount()-Methode wurde verwendet, obwohl die Any()-Methode effizienter gewesen wäre.

Regelbeschreibung

Diese Regel kennzeichnet die verwendeten Count()- und LongCount()-Methodenaufrufe, um zu überprüfen, ob die Sammlung mindestens ein Element enthält. Mit diesen Methodenaufrufen wird die gesamte Sammlung aufgelistet, um die Anzahl zu berechnen. Die gleiche Überprüfung ist mit der Any()-Methode schneller, da damit die Auflistung der Sammlung vermieden wird.

Hinweis

Diese Regel ähnelt CA1860: Vermeiden der Verwendung der Erweiterungsmethode „Enumerable.Any()“. Diese Regel empfiehlt jedoch die Verwendung der CountEigenschaft, obwohl sie für die Count()-Erweiterungsmethode gilt.

Behandeln von Verstößen

Um einen Verstoß zu beheben, ersetzen Sie die Count- oder LongCount-Methodenaufrufe mit der Any-Methode. Die folgenden beiden Codeausschnitte zeigen z. B. einen Verstoß gegen die Regel und wie dieser korrigiert werden kann:

using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Count() != 0 ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Any() ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.Any() ? "Not empty" : "Empty";
}

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 Count() oder LongCount() nicht verwenden, wenn Any() verwendet werden kann aus der Liste der Optionen, die angezeigt wird, aus.

Code fix for CA1827 - Do not use Count() or LongCount() when Any() can be used

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 Auflistungsenumeration 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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827

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.CA1827.severity = none

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

Siehe auch