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 9 aktiviert | Als Vorschlag |
Ursache
Die Methode Count() oder LongCount() wurde verwendet, bei der die Any()-Methode effizienter 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 schlägt jedoch vor, die Count
Eigenschaft zu verwenden, während diese Regel auf die Linq-Erweiterungsmethode Count()
angewendet wird.
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.
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.
Ähnliche Regeln
- CA1826: Eigenschaft anstelle der LINQ-Enumerable-Methode verwenden.
- CA1828: CountAsync/LongCountAsync nicht verwenden, wenn AnyAsync verwendet werden kann.
- CA1829: Length/Count-Eigenschaft anstelle der Enumerable.Count()-Methode verwenden
- CA1860: Vermeiden der Verwendung der Erweiterungsmethode „Enumerable.Any()“