Lambda expressions are anonymous functions with a concise syntax — the backbone of LINQ and functional C#.
// No parameters
Action greet = () => Console.WriteLine("Hello!");
// One parameter (parentheses optional)
Func<int, int> square = x => x * x;
// Multiple parameters
Func<int, int, int> add = (a, b) => a + b;
// Statement body (multiple lines)
Func<int, string> classify = n =>
{
if (n < 0) return "negative";
if (n == 0) return "zero";
return "positive";
};
int multiplier = 3;
Func<int, int> times = x => x * multiplier; // captures multiplier
Console.WriteLine(times(5)); // 15
multiplier = 10;
Console.WriteLine(times(5)); // 50 — captures by reference!
var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evens = numbers.Where(n => n % 2 == 0);
var squared = numbers.Select(n => n * n);
var sum = numbers.Where(n => n > 5).Sum();
var sorted = numbers.OrderByDescending(n => n);
Console.WriteLine(string.Join(", ", evens)); // 2, 4, 6, 8, 10
Console.WriteLine(sum); // 40