Категории
Самые читаемые
ChitatKnigi.com » 🟢Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
1 ... 246 247 248 249 250 251 252 253 254 ... 642
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

static void LambdaExpressionSyntax()

{

  // Создать список целочисленных значений.

  List<int> list = new List<int>();

  list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

  // Обработать каждый аргумент внутри группы операторов кода.

  List<int> evenNumbers = list.FindAll((i) =>

  {

    // текущее значение i

    Console.WriteLine("value of i is currently: {0}", i);

    bool isEven = ((i % 2) == 0);

    return isEven;

  });

  // Вывести четные числа

  Console.WriteLine("Here are your even numbers:");

  foreach (int evenNumber in evenNumbers)

  {

    Console.Write("{0}t", evenNumber);

  }

  Console.WriteLine();

}

В данном случае список параметров (опять состоящий из единственного целочисленного значения i) обрабатывается набором операторов кода. Помимо вызова метода Console.WriteLine() оператор вычисления остатка от деления разбит на два оператора ради повышения читабельности. Предположим, что каждый из рассмотренных выше методов вызывается внутри операторов верхнего уровня:

Console.WriteLine("***** Fun with Lambdas *****n");

TraditionalDelegateSyntax();

AnonymousMethodSyntax();

Console.WriteLine();

LambdaExpressionSyntax();

Console.ReadLine();

Запуск приложения дает следующий вывод:

***** Fun with Lambdas *****

Here are your even numbers:

20      4       8       44

Here are your even numbers:

20      4       8       44

value of i is currently: 20

value of i is currently: 1

value of i is currently: 4

value of i is currently: 8

value of i is currently: 9

value of i is currently: 44

Here are your even numbers:

20      4       8       44 

Лямбда-выражения с несколькими параметрами и без параметров

Показанные ранее лямбда-выражения обрабатывали единственный параметр. Тем не менее, это вовсе не обязательно, т.к. лямбда-выражения могут обрабатывать множество аргументов (или ни одного). Для демонстрации первого сценария с множеством аргументов добавьте показанную ниже версию класса SimpleMath:

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

public class SimpleMath

{

  public delegate void MathMessage(string msg, int result);

  private MathMessage _mmDelegate;

  public void SetMathHandler(MathMessage target)

  {

    _mmDelegate = target;

  }

  public void Add(int x, int y)

  {

    _mmDelegate?.Invoke("Adding has completed!", x + y);

  }

}

Обратите внимание, что делегат MathMessage ожидает два параметра. Чтобы представить их в виде лямбда-выражения, операторы верхнего уровня можно записать так:

// Зарегистрировать делегат как лямбда-выражение.

SimpleMath m = new SimpleMath();

m.SetMathHandler((msg, result) =>

  {Console.WriteLine("Message: {0}, Result: {1}", msg, result);});

// Это приведет к выполнению лямбда-выражения.

m.Add(10, 10);

Console.ReadLine();

Здесь задействовано выведение типа, поскольку для простоты два параметра не были строго типизированы. Однако метод SetMathHandler() можно было бы вызвать следующим образом:

m.SetMathHandler((string msg, int result) =>

  {Console.WriteLine("Message: {0}, Result: {1}", msg, result);});

Наконец, если лямбда-выражение применяется для взаимодействия с делегатом, который вообще не принимает параметров, то можно указать в качестве параметра пару пустых круглых скобок. Таким образом, предполагая, что определен приведенный далее тип делегата:

public delegate string VerySimpleDelegate();

вот как можно было бы обработать результат вызова:

// Выводит на консоль строку "Enjoy your string!".

VerySimpleDelegate d =

  new VerySimpleDelegate( () => {return "Enjoy your string!";} );

Console.WriteLine(d());

Используя новый синтаксис выражений, предыдущую строку можно записать следующим образом:

VerySimpleDelegate d2 =

  new VerySimpleDelegate(() => "Enjoy your string!");

1 ... 246 247 248 249 250 251 252 253 254 ... 642
Перейти на страницу:
Отывы о книге
Открыть боковую панель
Комментарии
Ксения
Ксения 25.01.2025 - 12:30
Неплохая подборка книг. Прочитаю все однозначно.
Jonna
Jonna 02.01.2025 - 01:03
Страстно🔥 очень страстно
Ксения
Ксения 20.12.2024 - 00:16
Через чур правильный герой. Поэтому и остался один
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее