Nur Lambda-Ausdruck ohne Methode Körper kann
Folgende Konstrukte tun Kompilierung Ausdrucksbaum umgewandelt werden:
Func<int> exp1 =() => 1;
Func<int> exp2 =() => { return 1; };
Func<int> exp3 = delegate { return 1; };
Expression<Func<int>> exp4 =() => 1;
Und folgendes tun nicht
Expression<Func<int>> exp5 = delegate { return 1; }; //no anonymous delegates
Expression<Func<int>> exp6 =() => { return 1; }; //or lambdas with block body
So gibt es Unterschied sogar auf nicht sehr fortgeschrittenem Niveau (dass Jon Sk eet weist darauf hin sick difference example)
Ein weiterer Unterschied ist, dass Sie anonyme Delegaten ohne Parameterliste erstellen können, wenn Sie nicht beabsichtigen, sie innerhalb der Methode body verwenden, mit Lambda müssen Sie immer Parameter bereitstellen.
Nach zwei Linien zeigen den Unterschied
Func<int, int, int, int, int> anonymous = delegate { return 1; };
Func<int, int, int, int, int> lambda = (param1, param2, param3, param4) => 1;
Sie tun im Wesentlichen das Gleiche, aber anonymen Delegaten hier deutlich besser aussieht.
+1, aber sind Lambda-Ausdrücke nicht nur das Rad neu erfinden (eher schlecht, da ich anonyme Methoden sinnvoller gemacht habe). –
so kann Lambada-Ausdruck keine Rückgabewerte haben? während anonyme Methode kann? –
SnOrfus: Ja, sie machen das Gleiche, also hast du recht, es ist nur eine Frage der Syntaxpräferenz.Sasha: Sowohl Lambdas als auch anonyme Methoden können Rückgabewerte haben. –