TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #165 619
День сто тридцать шестой. #ЗаметкиНаПолях
Лямбда-выражения. Начало
Лямбда-выражение - это блок кода (выражение или блок операторов), который обрабатывается как объект. Он может быть передан в качестве аргумента методам, а также может быть возвращен методом.
Варианты использования:
- Код для исполнения асинхронным методом, таким как Task.Run(Action).
- Выражения для запросов LINQ.
- Создание деревьев выражений.

Лямбда-выражения - это код, который может быть представлен как делегат или как дерево выражений, которое компилируется в делегат. Конкретный тип делегата лямбда-выражения зависит от его параметров и возвращаемого значения. Лямбда-выражения, которые не возвращают значение, соответствуют конкретному делегату Action с соответствующим количеством параметров. Лямбда-выражения, которые возвращают значение, соответствуют конкретному делегату Func с соответствующим количеством параметров. Например, лямбда-выражение, которое имеет два параметра, но не возвращает значения, соответствует делегату Action<T1, T2>. Лямбда-выражение с одним параметром, возвращающее значение, соответствует делегату Func<T, TResult>.
Лямбда-выражение использует =>, оператор лямбда-объявления, чтобы отделить список параметров лямбды от его исполняемого кода. Чтобы создать лямбда-выражение, указываются входные параметры (если они есть) слева от оператора лямбда-выражения, и само выражение с другой стороны. Например, однострочное лямбда-выражение x => x * x указывает параметр с именем x и возвращает значение x в квадрате.
Это выражение можно назначить:
- типу делегата:
Func<int, int> square = x => x * x;
Console.WriteLine(square(5));
// вывод: 25
- дереву выражений:
using System.Linq.Expressions;
Expression<Func<int, int>> exp = x => x * x;
Console.WriteLine(exp);
// вывод: x => (x * x)
- аргументу метода:
int[] numbers = { 2, 3, 4, 5 };
var squaredNumbers = numbers.Select(x => x * x);
Console.WriteLine(string.Join(" ", squaredNumbers));
// вывод: 4 9 16 25

При использовании синтаксиса методов для вызова Enumerable.Select в классе System.Linq.Enumerable (как в LINQ to Objects и LINQ to XML) его параметр является делегатом типа Func<T, TResult>. Лямбда-выражение является наиболее удобным способом создания этого делегата. При вызове метода Queryable.Select в классе System.Linq.Queryable (как в LINQ to SQL) тип параметра представляет собой дерево выражений Expression<Func <TSource, TResult>>. Опять же, лямбда-выражение - это краткий способ построения этого дерева выражений. Лямбда-выражения позволяют вызовам Select выглядеть одинаково, хотя на самом деле тип объекта, созданного из них, отличается.

Все ограничения, которые применяются к анонимным методам (см. https://t.me/NetDeveloperDiary/163), также применяются к лямбда-выражениям.

Продолжение следует…

Источник: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions
  • 👍 1
More from @netdeveloperdiary
  1. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  2. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  3. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  4. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  5. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  6. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →