Lambda-Ausdrücke in C#
Lernen Sie Lambda-Ausdrücke in C#, einschließlich Kurzsyntax, Func- und Action-Delegates und LINQ-Beispiele.
In C# ermöglichen Lambda-Ausdrücke, anonyme (namenlose) Methoden kurz und lesbar zu schreiben.
Sie werden mit dem =>-Operator (Lambda-Operator) definiert.
Lambda-Ausdrücke werden besonders häufig in LINQ-Abfragen, bei Event-Abonnements und im funktionalen Programmierstil verwendet.
Grundlegende Lambda-Syntax
Ein Lambda-Ausdruck besteht aus einer Parameterliste und einem Rumpf.
Bei einfachen Ausdrücken sind keine geschweiften Klammern erforderlich; bei mehrzeiligen Rümpfen können Klammern und return verwendet werden.
// Ein Parameter, einzeiliger Ausdruck
Func<int, int> quadrat = x => x * x;
Console.WriteLine(quadrat(5)); // 25
// Lambda mit mehreren Parametern
Func<int, int, int> summe = (a, b) => a + b;
Console.WriteLine(summe(3, 4)); // 7
// Mehrzeiliges Lambda
Func<int, int, int> produkt = (a, b) =>
{
Console.WriteLine($"Multipliziere: {a} * {b}");
return a * b;
};
Console.WriteLine(produkt(2, 6)); // 12
Lambda mit Action und Func
Lambda-Ausdrücke werden oft zusammen mit den Typen Action und Func verwendet:
- Action: Repräsentiert Methoden ohne Rückgabewert.
- Func<T,..., TResult>: Repräsentiert Methoden mit einem Rückgabewert.
Action begruessen = () => Console.WriteLine("Hallo!");
begruessen(); // Hallo!
Func<string, int> laenge = s => s.Length;
Console.WriteLine(laenge("Lambda")); // 6
Lambda und LINQ
Lambda-Ausdrücke werden am häufigsten in LINQ-Abfragen verwendet. Sie erleichtern das Filtern, Sortieren und Projizieren von Sammlungen.
var zahlen = new List<int> { 1, 2, 3, 4, 5, 6 };
// Gerade Zahlen filtern
var gerade = zahlen.Where(x => x % 2 == 0);
Console.WriteLine(string.Join(", ", gerade)); // 2, 4, 6
// Quadrate berechnen
var quadrate = zahlen.Select(x => x * x);
Console.WriteLine(string.Join(", ", quadrate)); // 1, 4, 9, 16, 25, 36
Lambda bei Events
Lambda-Ausdrücke sind eine praktische Möglichkeit, Ereignisse zu behandeln. Dadurch kann ein Event kurz abgefangen werden, ohne eine separate Methode zu definieren.
public class Button
{
public event EventHandler? Click;
public void SimulateClick()
{
Console.WriteLine("Button geklickt!");
Click?.Invoke(this, EventArgs.Empty);
}
}
class Program
{
static void Main()
{
var btn = new Button();
// Event mit Lambda abfangen
btn.Click += (s, e) => Console.WriteLine("Ereignis: Button wurde geklickt.");
btn.SimulateClick();
}
}
Closures und Variablen-Capturing
Lambda-Ausdrücke können auf Variablen im Scope ihrer Definition zugreifen. Dies wird als Closure bezeichnet.
int zaehler = 0;
Action erhoehen = () =>
{
zaehler++;
Console.WriteLine($"Zähler: {zaehler}");
};
erhoehen(); // Zähler: 1
erhoehen(); // Zähler: 2
Hier „fängt“ der Lambda-Ausdruck die äußere Variable zaehler ein und arbeitet weiter mit ihr.
Beispiel: Filtern und Berichten
In einer Shop-Anwendung können Lambda-Ausdrücke verwendet werden, um Produkte nach Preis zu filtern und Berichte zu erstellen.
public class Product
{
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
class Program
{
static void Main()
{
var produkte = new List<Product>
{
new Product { Name = "Laptop", Price = 25000m },
new Product { Name = "Maus", Price = 300m },
new Product { Name = "Tastatur", Price = 600m },
new Product { Name = "Monitor", Price = 4500m }
};
// Produkte über 1000 EUR finden
var teureProdukte = produkte.Where(p => p.Price > 1000);
foreach (var p in teureProdukte)
{
Console.WriteLine($"{p.Name} - {p.Price} EUR");
}
// Durchschnittspreis berechnen
var avg = produkte.Average(p => p.Price);
Console.WriteLine($"Durchschnittspreis: {avg:0.00} EUR");
}
}
TL;DR
- Kurz und anonym Methoden definieren mit dem
=>-Operator. - Häufig verwendet mit
ActionundFunc. - Unverzichtbar in LINQ zum Filtern, Auswählen und Sortieren.
- Kann bei Event-Abonnements ohne zusätzlichen Code verwendet werden.
- Unterstützt Closures und ermöglicht Zugriff auf externe Variablen.
Ähnliche Artikel
C# Schleifen (for, foreach, while, do-while)
Lernen Sie die Verwendung von for-, foreach-, while- und do-while-Schleifen in C#, um wiederholte Abläufe effizient umzusetzen.
Delegates und Ereignisse in C#
Lernen Sie Delegates und Events in C#, um ereignisgesteuerte Programmierung mit Callbacks und Beispielen umzusetzen.
Erweiterungsmethoden in C#
Lernen Sie Erweiterungsmethoden in C#, um bestehenden Typen neue Funktionen hinzuzufügen, ohne den Code zu ändern.
Methoden und Parameterverwendung in C#
Lernen Sie Methoden und die Verwendung von Parametern in C#, einschließlich Wert- und Referenzparametern sowie optionalen Parametern.
Operatoren und Ausdrücke in C#
Operatoren und Ausdrücke in C#: Verwendung von arithmetischen, Vergleichs-, logischen Operatoren, Inkrement-/Dekrement-, Ternary- und Null-Coalescing-Operatoren.