День сто тридцать шестой. #ЗаметкиНаПолях
Лямбда-выражения. Начало
Лямбда-выражение - это блок кода (выражение или блок операторов), который обрабатывается как объект. Он может быть передан в качестве аргумента методам, а также может быть возвращен методом.
Варианты использования:
- Код для исполнения асинхронным методом, таким как Task.Run(Action).
- Выражения для запросов LINQ.
- Создание деревьев выражений.
Лямбда-выражения - это код, который может быть представлен как делегат или как дерево выражений, которое компилируется в делегат. Конкретный тип делегата лямбда-выражения зависит от его параметров и возвращаемого значения. Лямбда-выражения, которые не возвращают значение, соответствуют конкретному делегату
Лямбда-выражение использует =>, оператор лямбда-объявления, чтобы отделить список параметров лямбды от его исполняемого кода. Чтобы создать лямбда-выражение, указываются входные параметры (если они есть) слева от оператора лямбда-выражения, и само выражение с другой стороны. Например, однострочное лямбда-выражение
Это выражение можно назначить:
- типу делегата:
Все ограничения, которые применяются к анонимным методам (см. https://t.me/NetDeveloperDiary/163), также применяются к лямбда-выражениям.
Продолжение следует…
Источник: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions
Лямбда-выражения. Начало
Лямбда-выражение - это блок кода (выражение или блок операторов), который обрабатывается как объект. Он может быть передан в качестве аргумента методам, а также может быть возвращен методом.
Варианты использования:
- Код для исполнения асинхронным методом, таким как 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