Lambda Syntax, Closures & Anonymous Functions Masterclass
๐ Covered in this chapter:
Lambda Syntax (=>) ยท Expression Lambdas ยท Statement Lambdas ยท Parameters & Return ยท Variable Capturing ยท Lexical Closures ยท Anonymous Functions
Welcome to Phase 7 (Chapter 22): C# Lambda Expressions, Closures & Anonymous Functions Masterclass! A lambda expression is an inline anonymous function specified using the lambda operator => (read as "goes to"). In this chapter, we cover expression lambdas, statement lambdas, lambda parameters, collection filtering, variable capture, and lexical closures.
1Expression Lambdas vs Statement Lambdas
C# โ Expression & Statement Lambdas
โถ Run in Compiler
// 1. Expression Lambda (single expression, implicit return)
Func<int, int> square = x => x * x;
Console.WriteLine($"Square of 6: {square(6)}"); // 36
// 2. Statement Lambda (enclosed in braces {}, requires explicit return)
Func<int, int, string> compare = (a, b) =>
{
if (a > b) return $"{a} is greater";
if (b > a) return $"{b} is greater";
return "Both are equal";
};
Console.WriteLine(compare(15, 20));
2Captured Variables & Closures
A **Closure** occurs when a lambda expression captures and references an outer local variable declared outside its immediate scope.
C# โ Closure Example
โถ Run in Compiler
int factor = 10; // Outer variable
Func<int, int> multiplyByFactor = n => n * factor; // Captures 'factor' variable!
Console.WriteLine($"5 * 10 = {multiplyByFactor(5)}"); // 50
factor = 20; // Modifying captured variable
Console.WriteLine($"5 * 20 = {multiplyByFactor(5)}"); // 100 โ Lambda sees updated value!
3Technical FAQs
Q1: What is the syntax rule for single vs multiple parameters in lambdas?
If a lambda has exactly one parameter, parentheses are optional (e.g., x => x * 2). If zero or multiple parameters exist, parentheses are mandatory (e.g., () => 42 or (x, y) => x + y).