Es ist wichtig zu verstehen, wo Lambda-Ausdrücke herkommen und warum sie verwendet werden. Es ist wahr, dass die meisten Leute von Lambdas durch LINQ hören, aber LINQ implementiert einfach ein Feature, das in Version 3.0 der C#-Sprache als Nachfolger (denke ich) anonymer Methoden eingeführt wurde.
Lambdas werden tatsächlich mit delegate
s verwendet und wenn du ein Lambda verwendest, weist du tatsächlich einer Methode ein delegate
zu. Du kannst jedoch das delegate
-Schlüsselwort vermeiden, weil der Compiler erkennen kann, dass du ein delegate
verwendest, einfach weil du einen Lambda-Ausdruck verwendest.
Also sind folgende Dinge dasselbe:
MyDel del = delegate (int x) {return x + 1;} ; // Verwendung einer anonymen Methode
MyDel le1 = x => x + 1; // Verwendung eines Lambda-Ausdrucks
Denke daran, dass ein Delegate seine Methoden nicht ausführt, bis es aufgerufen wird. Wenn du also x => x + 1
in deinem Lambda-Ausdruck siehst, wird dies tatsächlich erst ausgeführt, wenn du le1(someInt)
aufrufst. Das hast du vielleicht in LINQ gesehen, wo die Abfrage erst ausgeführt wird, wenn das Delegate aufgerufen wird.
Kurz gesagt (und ich bin nicht für meine Kürze bekannt), ermöglicht ein Lambda, einen Methodenaufruf in Kurzform auszudrücken, ohne ihn im Körper deiner Klasse deklarieren zu müssen.
Meine Quelle für diese Antwort stammt von Daniel Solis' Illustriertes C# 2008, S.375-377.