© StonePictures/Shutterstock.com
Abfragen mit LINQ übersichtlich und lesbar entwickeln

Schleifen vermeiden mit LINQ


Bereits seit .NET Framework 3.5 unterstützt C# das Feature LINQ. Obwohl mit Hilfe von LINQ der Code gegenüber klassischen Schleifen übersichtlicher und lesbarer wird, hat es sich zum Vermeiden von Schleifen noch nicht bei allen Entwicklern durchgesetzt. Oft wird innerhalb einer Schleife gefiltert und geschachtelt, was lange und unübersichtliche Schleifenblöcke zur Folge hat. Das soll mit LINQ ein Ende haben und jedem C#-Entwickler die Möglichkeit geben, Abfragen auf übersichtliche und lesbare Weise zu schreiben.

Language-Integrated Query (LINQ) ist eine Abfragesprache und bietet die Möglichkeit, Abfragen auf eine Menge von Daten innerhalb von C# zu schreiben. Beispielsweise kann mit LINQ geprüft werden, ob sich ein Element in einer Menge befindet, oder es kann nach Eigenschaften der einzelnen Elemente gefiltert werden. Gleichzeitig gibt es die Möglichkeit, mit Hilfe von LINQ Schleifen zu reduzieren und den Code für Entwickler leserlicher zu machen.

Warum sollen Schleifen vermieden werden?

Unter dem Aspekt der Übersichtlichkeit und Wartbarkeit gibt es drei große Probleme bei der Verwendung von Schleifen:

  • Die Absicht einer Schleife ist selten direkt erkennbar.

  • Schleifen vereinen oft mehr als eine Absicht im Schleifenkonstrukt.

  • Das gesamte Schleifenkonstrukt wird benötigt und zerstört den Lesefluss.

Listing 1 ist ein einfaches Beispiel und zeigt, dass auch einfache Code-Snippets mit LINQ schneller verstanden werden können.

Listing 1: Filtern nach geraden Zahlen

IEnumerable<int> GetEvenNumbersWithLoop(IList<int> listOfNumbers) { foreach (var number in listOfNumbers) { if (number % 2 == 0) { yield return number; } } } IEnumerable<int> GetEvenNumbersWithLinq(IList<int> listOfNumbers) { bool Even(int x) => x % 2 == 0; return listOfNumbers.Where(Even); }

Obwohl es sich um ein einfaches Beispiel handelt, kann der Code mit LINQ direkt verstanden werden, ohne mit Implementierungsdetails überflutet zu werden. Beim Lesen des Codes kann man aufgrund der Benennungen und der Verwendung einer lokalen Funktion direkt verstehen, was passieren soll. In der Praxis, wo die Beispiele schnell komplexer werden (ein Beispiel zeigt Listing 2), kann es einen großen Unterschied machen, ob der Entwickler die Absicht einer Schleife erfassen kann. Wenn der Entwickler eine Schleife debuggen muss, kann es einige Zeit dauern, bis er den Sinn der Schleife erkannt hat und diese als mögliche Fehlerquelle ausschließen kann. Die LINQ-Funktionen unterstützen bei Abfragen das Method Chaining ...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang