Lambda Syntax, Closures & Anonymous Functions Masterclass

โšก C# 12 & .NET 8 ๐ŸŸข Chapter 22 of 35 ๐Ÿ“‚ Phase 7: Advanced C# Language ๐Ÿ“… 2026 Edition
๐Ÿ“Œ 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).