Что такое лямбда выражения в С#
Лямбда-выражения в C# — это сокращённый синтаксис для определения анонимных методов, то есть методов без имени, которые можно передавать как делегаты или использовать в LINQ-запросах. Они позволяют писать компактный и читаемый код, особенно при работе с коллекциями, событиями и асинхронными операциями.
Синтаксис
Базовый синтаксис лямбда-выражения: параметры => выражение. Оператор => читается как «переходит к» и разделяет список параметров и тело выражения.
Примеры:
// Без параметров
() => Console.WriteLine("Привет, мир!");
// Один параметр (тип выводится)
x => x * x; // возвращает квадрат x
// Несколько параметров
(x, y) => x + y; // складывает x и y
// Явное указание типов параметров
(int x, string s) => s.Length > x;Если тело лямбды состоит из нескольких операторов, используется блок в фигурных скобках:
(x, y) =>
{
var sum = x + y;
Console.WriteLine(sum);
return sum;
};Применение в LINQ
Лямбда-выражения широко используются в LINQ для написания кратких запросов к коллекциям. Например, выбор положительных чисел из списка:
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:
Func<int, int> square = x => x * x;
Action<string> print = msg => Console.WriteLine(msg);В обработчиках событий лямбды позволяют не создавать отдельный метод:
button.Click += (sender, args) => Console.WriteLine("Clicked!");Подводные камни
- Захват переменных: лямбда может захватывать переменные из внешнего контекста, что может привести к неожиданному поведению в циклах (особенно в старых версиях C#).
- Производительность: в некоторых случаях лямбды создают дополнительные аллокации, но в современных версиях C# компилятор оптимизирует многие сценарии.
- Читаемость: слишком длинные или сложные лямбды ухудшают читаемость; лучше выносить их в отдельные методы.
Коротко
- Лямбда-выражение — это анонимный метод с синтаксисом
параметры => выражение. - Основное применение — LINQ, делегаты и обработчики событий.
- Бывают с одним, несколькими параметрами или без них; тело может быть выражением или блоком.
- Помните о захвате переменных и старайтесь не делать лямбды слишком сложными.
