Häufige C# Fehler: Iterative (statt deklarative) Statement bei Collections

In C # 3.0, ward endlich licht und der frommen C# Gemeinde wurde LINQ(Language integrated Query) geschenkt um die Arbeit mit Collections zu arbeiten komplett zu ändern. Jedes mal wenn sie nun iterative Statements benutzen um Collections zu manipulieren hätten sie LINQ benutzen sollen.

Man mag es kaum glauben aber noch gibt es eine kleine Schaar von C# Programmieren die LINQ nicht kennen, eine wirklich sehr kleine Schaar. Es herrscht vieler Orts noch die Meinung vor LINQ wäre nur geeignet SQL Abfragen zu “ersetzen”.

Während Datenbankabfragen tatsächlich der prominenteste Zweck von LINQ Abfragen sind, kann man sie auch auf jede enumerable Collection (dh. jedes Objekt, das die IEnumerable-Schnittstelle implementiert) anwenden. Also Beispielsweise:

 decimal total = 0;
 foreach (Konto konto in Meine_Konten) {
 if (konto.Status == "aktiv") {
 total + = konto.Balance;
	}
 }

Sie könnten einfach schreiben:

  decimal total = (from konto in Meine_Konten
                   where konto.Status == "aktiv"
                   select konto.Balance).Sum();

 

Dies ist zwar ein ziemlich einfaches Beispiel dafür, wie übliche  C# Problem zu vermeiden ist, aber es gibt Fälle, in denen eine einzelne LINQ-Anweisung leicht viele Statements in einer iterativen Schleife (oder verschachtelte Schleife) ersetzen kann. Und weniger Code im allgemeinen bedeutet weniger Möglichkeiten Fehler zu machen. Denken Sie daran, LINQ Statements zu benutzen kann in manchen Szenarien ein Leistungsabfall zur Folge haben, besonders dann wenn Ihr iterativer Code in der Lage wäre Annahmen über ihre Collections zu treffen die per LINQ nicht implementierbar sind. Ich empfehle stets beide Varianten abzuwägen.

Kommentare sind geschlossen