День сто тридцать восьмой. #ЗаметкиНаПолях
Лямбда-выражения. Продолжение
Лямбды операторов
Лямбда операторов напоминает лямбда-выражение, за исключением того, что оператор(ы) заключен(ы) в фигурные скобки:
Асинхронные лямбды
Вы можете легко создавать лямбда-выражения и операторы, которые включают асинхронную обработку, используя ключевые слова
Начиная с C# 7.0, язык поддерживает кортежи как аргументы или возвращаемые значения лямбда-выражений. В некоторых случаях компилятор C# использует определение типа для определения типов компонентов кортежа.
Вы определяете кортеж, заключая в скобки список его компонентов, разделенных запятыми. В следующем примере используется кортеж с тремя компонентами для передачи последовательности чисел в лямбда-выражение, которое удваивает каждое значение и возвращает кортеж с тремя компонентами, который содержит результат умножения.
Источник: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions
Лямбда-выражения. Продолжение
Лямбды операторов
Лямбда операторов напоминает лямбда-выражение, за исключением того, что оператор(ы) заключен(ы) в фигурные скобки:
(входные параметры) => {оператор;}Тело оператора лямбда может состоять из любого числа операторов; однако на практике их обычно не более двух или трех:
Action<string> greet = name =>Лямбды операторов, как и анонимные методы, не могут быть использованы для создания деревьев выражений.
{
string greeting = $"Hello {name}!";
Console.WriteLine(greeting);
};
greet("World");
// Вывод:
// Hello World!
Асинхронные лямбды
Вы можете легко создавать лямбда-выражения и операторы, которые включают асинхронную обработку, используя ключевые слова
async
и await
. В следующем примере Windows Forms содержится обработчик событий, который вызывает и ожидает асинхронный метод SomeAsyncMethod
:public Form1()Обработчик нажатия на кнопку можно добавить с помощью асинхронной лямбды:
{
InitializeComponent();
button1.Click += button1_Click;
}
private async void button1_Click(object sender, EventArgs e)
{
await SomeAsyncMethod();
}
private async Task SomeAsyncMethod(){…}
public Form1()Лямбда-выражения и кортежи
{
InitializeComponent();
button1.Click += async (sender, e) =>
{
await SomeAsyncMethod();
};
}
Начиная с C# 7.0, язык поддерживает кортежи как аргументы или возвращаемые значения лямбда-выражений. В некоторых случаях компилятор C# использует определение типа для определения типов компонентов кортежа.
Вы определяете кортеж, заключая в скобки список его компонентов, разделенных запятыми. В следующем примере используется кортеж с тремя компонентами для передачи последовательности чисел в лямбда-выражение, которое удваивает каждое значение и возвращает кортеж с тремя компонентами, который содержит результат умножения.
Func<(int, int, int), (int, int, int)> doubleThem = ns => (2 * ns.Item1, 2 * ns.Item2, 2 * ns.Item3);Обычно поля кортежа называются
var numbers = (2, 3, 4);
var doubles = doubleThem(numbers);
Console.WriteLine($"Кортеж чисел {numbers} удвоен: {doubles}");
// Вывод:
// Кортеж чисел (2, 3, 4) удвоен: (4, 6, 8)
Item1
, Item2
, и т.п. Но можно задать им имена:Func<(int n1, int n2, int n3), (int, int, int)> doubleThem = ns => (2 * ns.n1, 2 * ns.n2, 2 * ns.n3);Продолжение следует…
Источник: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions