Lambda-Ausdrücke sind cool. Über älter delegate
Syntax Sie haben einige Vorteile, z. B. können sie entweder in anonyme Funktions- oder Ausdrucksbäume umgewandelt werden, die Parametertypen werden aus der Deklaration abgeleitet, sie sind sauberer und prägnanter, usw. Ich sehe keinen wirklichen Nutzen darin, keinen Lambda-Ausdruck zu verwenden, wenn man eine anonyme Funktion braucht. Ein nicht so großer Vorteil des früheren Stils ist, dass man die Parameterdeklaration ganz weglassen kann, wenn sie nicht verwendet werden. Zum Beispiel
Action<int> a = delegate { }; //takes one argument, but no argument specified
Dies ist nützlich, wenn Sie einen leeren Delegaten deklarieren müssen, der nichts tut, aber nicht zu den stark Grund genug, keine Lambdas zu verwenden.
Mit Lambdas können Sie schnell anonyme Methoden schreiben. Das macht Lambdas überall dort bedeutungslos, wo anonyme Methoden bedeutungslos werden, d.h. wo benannte Methoden mehr Sinn machen. Über benannte Methoden Anonyme Methoden können nachteilig sein (das hat nichts mit Lambda-Ausdrücken an sich zu tun, aber da Lambdas heutzutage weitgehend anonyme Methoden darstellen, ist das relevant):
-
weil sie dazu neigen, Logik zu duplizieren (was oft der Fall ist, Wiederverwendung ist schwierig)
-
wenn es nicht notwendig ist, an einen zu schreiben, wie:
//this is unnecessary
Func<string, int> f = x => int.Parse(x);
//this is enough
Func<string, int> f = int.Parse;
-
da das Schreiben eines anonymen Iteratorblocks unmöglich ist.
Func<IEnumerable<int>> f = () => { yield return 0; }; //impossible
-
da rekursive Lambdas eine weitere Zeile mit Eigenheiten erfordern, wie
Func<int, int> f = null;
f = x => (x <= 1) ? 1 : x * f(x - 1);
-
Nun, da die Reflexion etwas unordentlicher ist, aber das ist doch egal, oder?
Abgesehen von Punkt 3 sind die übrigen Punkte nicht stark Gründe nicht zu verwenden Lambdas.
Siehe auch dies Gewinde darüber, was nachteilig ist an Func/Action
Delegaten, da sie oft zusammen mit Lambda-Ausdrücken verwendet werden.
2 Stimmen
Ich empfehle Ihnen, www.lambdaexpression.net zu besuchen.
6 Stimmen
@Delashmate-Domain wird jetzt von Spammern übernommen