Lambda Ausdrücke werden in Kombination mit Delegaten dazu verwendet um schnelle Anweisungen auszuführen und sich dabei jede Menge Code zu ersparen.
Ohne Lambda und anonymer Methode für ein Delegatenaufruf in etwa so aussehen:
Neue Eigenschaft vom Typ delegate erstellen. (Rückgabewert ist ein int, mit 2 in Parameter a und b)
1 |
public delegate int MyDelegate(int a, int b); |
Dann müssen wir eine Methode haben, die ebenfalls denselben Rückgabewert und Parameter besitzt (Anzahl und Typ sind entscheidend)
1 2 3 4 |
private int addiere(int x, int y) { return x + y; } |
Nun könnte man ein Objekt vom den oben erstellten MyDelegate erstellen und dem die Methode addiere zuweisen:
1 |
MyDelegate dlg = new MyDelegate(addiere); |
Durch den Aufruf des Objektes dlg zeigt der Delegat auf die Methode addiere, führt diese aus und gibt den Rückgabewert zurück:
1 |
Console.WriteLine(dlg(8,9)); |
________________
Dies ist in der Tat etwas umständlich. Vor allem benötigt man immer ein Methode, die man dem Delegaten immer zuweisen muss.
schneller geht es mit den Lambda Ausdrücken.:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Großzügig ausgeschriebene anonyme Methode MyDelegate delegat1 = delegate(int a, int b) { return a * b; }; //Lambdaaufruf - klassisch MyDelegate delegat2 = (int a, int b) => { return a * b; }; //Datentyp int wird durch undefinierten Typ ersetzt MyDelegate delegat3 = (a, b) => { return a * b; }; //return Anweisung verschwindet... MyDelegate delegat4 = (a, b) => (a * b); //Klammer verschwinden MyDelegate delegat5 = (a, b) => a * b; Console.WriteLine(delegat1(7,8)); Console.WriteLine(delegat5(7,8)); |
Die delegaten delegat1 bis delegat 5 tun immer dasselbe, nur wird der Code dadurch sehr kompakter und wenn man delegaten erstmal verstanden hat, wird es auch übersichtlicher.
Hat man einen Delegaten ohne Rückgabewert, würde der Lambdaausdruck mit Klammer auf- Klammer zu sein:
1 |
MyDelegate delegat6 = () => a * b; |
Wegen den => Operator werden die Lampdaausdrücke oft mit Linq verwechselt. Das eine hat mit dem anderen aber nichts zu tun 🙂
Login