Nun, Lambda-Ausdrücke haben zwei Haupteigenschaften gegenüber anonymen Methoden:
Sofern Sie keine Ausdrucksbäume verwenden, sind sie den anonymen Methoden sehr ähnlich. Der Unterschied besteht darin, dass Sie oft mehrere Lambda-Ausdrücke in einer Anweisung schreiben können (Verkettung von Methodenaufrufen), ohne die Lesbarkeit zu verlieren, aber anonyme Methoden sind nur ein bisschen zu wortwörtlich.
Übrigens ist es nicht so sehr, dass Lambda-Ausdrücke "einfach syntaktischer Zucker um anonyme Delegierte" sind, da sowohl Lambda-Ausdrücke als auch anonyme Methoden "nur syntaktische Suggestion sind, um Delegaten (und Ausdrucksbäume) zu erzeugen."
Vermeiden Sie syntaktischen Zucker jedoch nicht - die Vorteile von anonymen Funktionen, die als Verschlüsse fungieren, sind enorm, zusammen mit der Fähigkeit, den Code genau dort zu haben, wo Sie ihn haben wollen, anstatt in einer separaten Methode.
Sie können einfach als Syntaxzucker für einen Delegaten verwendet werden, aber das große an Lambdas ist, dass der Compiler die Fähigkeit hat, sie in Ausdrucksbäume , die viele Möglichkeiten eröffnen (nicht zuletzt LINQ).
Eine sehr knappe Syntax macht es wahrscheinlicher, dass mehr Dinge um sie herum gebaut werden. Stellen Sie sich eine komplexe Linq-Abfrage ohne jegliche Art von syntaktischem Zucker vor.
Sind sie nur syntaktischer Zucker in der Nähe? anonyme Delegierte, oder ist da etwas mehr, was ich nicht sehen kann?
Gute Frage. Die Antwort ist kompliziert. Zuallererst sind offensichtlich die Ausdrucksbäume die Großen. Aber es gibt auch einige Feinheiten. Hier sind meine fünf ausführlichen und oft abschweifenden Artikel zum Thema, wie sich Lambdas subtil von anonymen Methoden unterscheiden:
Alle meine Artikel über Probleme mit Lambda-Ausdrücken sind hier archiviert: