Zum Hauptinhalt springen
ai-slop/csharp-linq-countmanuelle Behebung

Leerprüfung mit Count().

`.Count() > 0` oder `.Count() == 0`, um zu fragen, ob eine Sequenz Elemente enthält. Auf einem lazy Enumerable wird dafür jedes Element durchlaufen, nur um eine Ja/Nein-Frage zu beantworten.

Beanstandete und saubere Form.

Jedes Beispiel zeigt genau die Codeform, nach der die Regel sucht, und dann die kleinste Version, die die Absicht bewahrt, ohne Risiken zu verstecken oder Rauschen hinzuzufügen.

csharp-linq-count.cs
✗ Beanstandet
if (customer.Orders.Where(o => o.IsOverdue).Count() > 0)
{
    SendReminder(customer);
}
Warum das anschlägt

Deterministischer Zeilenabgleich: beanstandet den Methodenaufruf `.Count()` ohne Argumente, wenn er mit einem beliebigen Vergleichsoperator auf einer der beiden Seiten mit 0 oder 1 verglichen wird.

csharp-linq-count.cs
✓ Sauber
if (customer.Orders.Any(o => o.IsOverdue))
{
    SendReminder(customer);
}
Was sich geändert hat

Nutze `.Any()` für die Nicht-leer-Prüfung und `!.Any()` für die Leer-Prüfung. Auf einer materialisierten Collection ist auch die `Count`- oder `Length`-Property in Ordnung.

Agenten greifen aus Gewohnheit zum Zählaufruf, weil er sich natürlich liest, ohne zu bedenken, was er auf einer Query kostet.

Wie diese Regel begründet ist.

Regel-ID

ai-slop/csharp-linq-count

Prüfende Engine

ai-slop

Erkennungsstrategie

Deterministischer Zeilenabgleich: beanstandet den Methodenaufruf `.Count()` ohne Argumente, wenn er mit einem beliebigen Vergleichsoperator auf einer der beiden Seiten mit 0 oder 1 verglichen wird.

Legitimer Code, der NICHT beanstandet wird

Die `.Count`-Property von Collections, `.Count(predicate)`-Aufrufe und Vergleiche mit anderen Zahlen werden nicht beanstandet.

Belege

Teil des C#-Regelsatzes von aislop. Vollwertige C#-Unterstützung, einschließlich C#-spezifischer AI-Slop-Regeln, kam mit aislop v0.14.1.