CA1826: Eigenschaft anstelle der LINQ-Enumerable-Methode verwenden.
Eigenschaft | Wert |
---|---|
Regel-ID | CA1826 |
Titel | Eigenschaft anstelle der LINQ-Enumerable-Methode verwenden. |
Kategorie | Leistung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Als Vorschlag |
Ursache
Die Enumerable LINQ-Methode wurde für einen Typ verwendet, der eine äquivalente, effizientere Eigenschaft unterstützt.
Regelbeschreibung
Diese Regel kennzeichnet die Aufrufe der LINQ-Methode Enumerable für Auflistungen von Typen, die über entsprechende, aber effizientere Eigenschaften zum Abrufen derselben Daten verfügen.
Diese Regel analysiert Auflistungstypen, die IReadOnlyList<T>, aber nicht IList<T> implementieren.
Diese Regel kennzeichnet Aufrufe der folgenden Methoden für diese Auflistungstypen:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
Die analysierten Auflistungstypen und -methoden werden ggf. in Zukunft erweitert, um mehr Fälle abzudecken.
Behandeln von Verstößen
Um einen Verstoß zu beheben, ersetzen Sie den Aufruf den Enumerable-Methodenaufruf durch Eigenschaftszugriff. Die folgenden beiden Codeausschnitte zeigen z. B. einen Verstoß gegen die Regel und wie dieser korrigiert werden kann:
using System;
using System.Collections.Generic;
using System.Linq;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list.First());
Console.Write(list.Last());
Console.Write(list.Count());
}
}
using System;
using System.Collections.Generic;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list[0]);
Console.Write(list[list.Count - 1]);
Console.Write(list.Count);
}
}
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 in der Liste der angezeigten Optionen Indexer verwenden 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 speziellen Enumerable-Methodenaufrufe machen.
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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
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.CA1826.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Konfigurieren des zu analysierenden Codes
Mithilfe der folgenden Option können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.
Ausschließen von FirstOrDefault- und LastOrDefault-Methoden
Sie können diese Regel so konfigurieren, dass die Methoden Enumerable.FirstOrDefault und Enumerable.LastOrDefault von der Analyse ausgeschlossen werden. Sie können erwägen, diese Methoden auszuschließen, wenn die Lesbarkeit ein Problem ist, da der Code, den Sie schreiben würden, um sie zu ersetzen, nicht einfach zu lesen ist. Fügen Sie der Datei .editorconfig Ihres Projekts das folgende Schlüssel-Wert-Paar hinzu, um diese Methoden auszuschließen:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Ä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.