➡️ x => x * 2 is a Lambda
LINQ needs functions. Lambda expressions create inline functions. Cleaner, shorter, more readable.
❌ Named Method
bool IsEven(int x) {
return x % 2 == 0;
}
var evens = numbers.Where(IsEven);
✅ Lambda
var evens = numbers.Where(x => x % 2 == 0);
🎯 Lambda Variations
// No parameters
Action greet = () => Console.WriteLine("Hello");
// One parameter (parentheses optional)
Func square = x => x * x;
// Multiple parameters
Func add = (a, b) => a + b;
// Multiple statements (use braces)
Func multiply = (a, b) =>
{
int result = a * b;
Console.WriteLine($"{a} * {b} = {result}");
return result;
};
// Discard parameters
Func ignoreFirst = (_, y) => y;
// Lambda with tuple
var items = list.Select(x => (x.Id, x.Name));
// Async lambda
button.Click += async (sender, e) =>
{
await Task.Delay(1000);
Console.WriteLine("Done");
};
💡 Capture Variables
- Lambdas can capture local variables (closures)
- Captured variables are stored on heap
- Avoid capturing in performance-critical loops
- Use static lambdas (C# 9) to prevent capture
“Lambdas changed how I write LINQ. Clean, inline, readable. Couldn’t imagine C# without them.”
