Встречается на 55% собеседований по C#

Что такое лямбда выражения в С#

Лямбда-выражения в C# — это сокращённый синтаксис для определения анонимных методов, то есть методов без имени, которые можно передавать как делегаты или использовать в LINQ-запросах. Они позволяют писать компактный и читаемый код, особенно при работе с коллекциями, событиями и асинхронными операциями.

Синтаксис

Базовый синтаксис лямбда-выражения: параметры => выражение. Оператор => читается как «переходит к» и разделяет список параметров и тело выражения.

Примеры:

csharp
// Без параметров
() => Console.WriteLine("Привет, мир!");

// Один параметр (тип выводится)
x => x * x; // возвращает квадрат x

// Несколько параметров
(x, y) => x + y; // складывает x и y

// Явное указание типов параметров
(int x, string s) => s.Length > x;

Если тело лямбды состоит из нескольких операторов, используется блок в фигурных скобках:

csharp
(x, y) =>
{
    var sum = x + y;
    Console.WriteLine(sum);
    return sum;
};

Применение в LINQ

Лямбда-выражения широко используются в LINQ для написания кратких запросов к коллекциям. Например, выбор положительных чисел из списка:

csharp
List<int> numbers = new List<int> { -1, 0, 1, 2, 3, 4, 5 };
var positiveNumbers = numbers.Where(x => x > 0).ToList();

foreach (var number in positiveNumbers)
{
    Console.WriteLine(number);
}

Здесь x => x > 0 — предикат, который передаётся в метод Where. Лямбда также используется в Select, OrderBy, Aggregate и других операторах LINQ.

Делегаты и события

Лямбда-выражения можно присваивать делегатам, например Func и Action:

csharp
Func<int, int> square = x => x * x;
Action<string> print = msg => Console.WriteLine(msg);

В обработчиках событий лямбды позволяют не создавать отдельный метод:

csharp
button.Click += (sender, args) => Console.WriteLine("Clicked!");

Подводные камни

  • Захват переменных: лямбда может захватывать переменные из внешнего контекста, что может привести к неожиданному поведению в циклах (особенно в старых версиях C#).
  • Производительность: в некоторых случаях лямбды создают дополнительные аллокации, но в современных версиях C# компилятор оптимизирует многие сценарии.
  • Читаемость: слишком длинные или сложные лямбды ухудшают читаемость; лучше выносить их в отдельные методы.

Коротко

  • Лямбда-выражение — это анонимный метод с синтаксисом параметры => выражение.
  • Основное применение — LINQ, делегаты и обработчики событий.
  • Бывают с одним, несколькими параметрами или без них; тело может быть выражением или блоком.
  • Помните о захвате переменных и старайтесь не делать лямбды слишком сложными.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы