Lambda Expressions

Mein Kollege Michael Zöhling hat vor ein paar Tagen einen Eintrag geschrieben der sich mit dem Thema Delegates in C# befasst.

Ich möchte daran ansetzen und erklären, welchen Zusammenhang Delegates mit Lambda Expressions haben.

Wie wie aus Michaels Beitrag gelernt haben, können wir also eine Methode in einer Variable vom Typ Action<T> oder Func<T> speichern, solange die Signatur (Rückgabewert und Parameterliste) des Delegates gleich ist mit der Signatur unserer Methode.

static void Main(string[] args)
{
Func<int, int, double> plus = Addition;

double summe = plus(8, 10);
}

private static double Addition(int operator1, int operator2)
{
return operator1 + operator2;
}

Oft gibt es jedoch den Fall, dass man diese Methode nur genau ein einziges Mal aufrufen will. In dem Fall ist es ja fast ein bisschen viel Aufwand eine selbstständige Methode zu schreiben, sich einen passenden Namen zu überlegen (schließlich ist ja das Namen vergeben meistens das schwerste Zwinkerndes Smiley). Darum schauen wir uns mal an, wie man den Namen weglassen kann – Wir bauen also eine anonyme Methode.

static void Main(string[] args)
{
Func<int, int, double> plus = delegate (int operator1, int operator2)
{
return operator1 + operator2;
};

double summe = plus(8, 10);
}

Eine Lambda Expression ist im Prinzip nichts anderes mehr, als das ganze bisschen abgekürzt.
Wir verzichten einfach mal auf den Operator delegate und da wir ja faul sind lassen wir auch gleich die zwei Datentypen weg.
Dafür müssen wir jedoch den Lambda Operator anfügen.

static void Main(string[] args)
{
Func<int, int, double> plus = (operator1, operator2) =>
{
return operator1 + operator2;
};

double summe = plus(8, 10);
}

Das wäre somit unser erste Lambda Expression – jedoch können wir das alles noch bisschen kürzen.

static void Main(string[] args)
{
Func<int, int, double> plus = (a, b) => a + b;

double summe = plus(8, 10);
}

In einem weitern Blogeintrag werde ich die Verwendung von Lambdas in der Praxis mit Linq zeigen.

Kommentare sind geschlossen