Wissen von A bis Z

Lambda-Ausdrücke

Lambda-Ausdrücke sind die Kurzmitteilungen unter den C#-Funktionen: kurz, prägnant und direkt auf den Punkt.

Lambda-Ausdrücke sind anonyme, oft sehr kurze Funktionen in C#, die mit dem Pfeil-Operator => geschrieben werden, etwa x => x * 2 oder (a, b) => a.Value < b.Value. Sie können entweder in Delegates (z. B. Func mit zwei Typparametern) oder in Expression Trees gebunden werden — eine Unterscheidung, die für Frameworks wie Entity Framework Core und LINQ-Provider entscheidend ist.

Eingesetzt werden Lambdas täglich in fast jedem .NET-Projekt: als Prädikate in LINQ-Operatoren wie Where, Select, OrderBy, als Callback-Argumente, als Event-Handler, in Konfigurations-DSLs (z. B. ASP.NET Core Builder-Methoden, Entity Framework Fluent-API), in Test-Frameworks (Assert-Methoden mit Action-Callbacks) und in Pattern-Matching-Pipelines. In vielen Codebasen sind Lambdas die häufigste Form, mit Delegates zu arbeiten.

Der Einsatzzweck und das gelöste Problem ergeben sich aus der Notwendigkeit, kleine Stücke Verhalten kompakt am Aufrufort zu definieren. Vor Lambdas (und vor anonymen Methoden in C# 2) musste jede Funktion, die als Callback dienen sollte, als benannte Methode in der umgebenden Klasse stehen. Das führte zu unnatürlich verteilter Logik und erschwerte Closure-Semantik (Zugriff auf umgebende Variablen). Lambdas integrieren beides syntaktisch elegant: kurze Definition, Closures über lokale Variablen, klare Inferenz von Parametertypen.

Historisch wurden Lambda-Ausdrücke mit C# 3.0 / .NET 3.5 (2007) als Bestandteil des LINQ-Pakets eingeführt. Spätere Verbesserungen sind Statement Lambdas (mit geschweiften Klammern), das Capture-Verhalten von Variablen (mit static lambdas in C# 9 zur Vermeidung versehentlicher Allokationen), Default Parameters für Lambdas (C# 12) und Lambdas ohne Parameter-Klammern.

Eingeführt wurden Lambda-Ausdrücke vom C#-Sprachteam um Anders Hejlsberg, Mads Torgersen und Erik Meijer. In den frühen LINQ-Vorträgen 2006 wurde der Lambda-Operator => intern lange als ‚fat arrow' bezeichnet, weil das Designteam überlegte, ob ein einfacher Pfeil verständlicher wäre. Der ‚fat arrow' setzte sich durch, weil er sich grafisch deutlich vom in Generics häufigen Vergleichszeichen abhebt; heute ist genau diese Schreibweise in JavaScript, TypeScript und vielen anderen Mainstream-Sprachen Standard geworden.

Zurück