// Выполнить проверку достоверности
return Add(x,y);
static int Add(int x, int y)
{
return x + y;
}
}
В версии C# 9.0 анонимные методы также могут быть помечены как статические с целью предохранения инкапсуляции и гарантирования того, что они не привнесут какие-либо побочные эффекты в код, где они содержатся. Вот как выглядит модифицированный анонимный метод:
c1.AboutToBlow += static delegate
{
// Этот код приводит к ошибке на этапе компиляции,
// потому что анонимный метод помечен как статический
aboutToBlowCounter++;
Console.WriteLine("Eek! Going too fast!");
};
Предыдущий код не скомпилируется из-за попытки анонимного метода получить доступ к переменной, объявленной вне области его действия.
Использование отбрасывания с анонимными методами (нововведение в версии 9.0)
Отбрасывание, представленное в главе 3, в версии C# 9.0 было обновлено с целью применения в качестве входных параметров, но с одной уловкой. Поскольку символ подчеркивания (_
Например, в следующем коде создается делегат Func<>
42:Console.WriteLine("******** Discards with Anonymous Methods ********");
Func
Console.WriteLine("constant(3,4)={0}",constant(3,4));
Понятие лямбда-выражений
Чтобы завершить знакомство с архитектурой событий .NET Core, необходимо исследовать
В целях подготовки фундамента для изучения лямбда-выражений создайте новый проект консольного приложения по имени LambdaExpressions
FindAll() обобщенного класса List. Данный метод можно вызывать, когда нужно извлечь подмножество элементов из коллекции; вот его прототип:// Метод класса System.Collections.Generic.List
public List
Как видите, метод FindAll()
List, который представляет подмножество данных. Также обратите внимание, что единственным параметром FindAll() является обобщенный делегат типа System.Predicate, способный указывать на любой метод, который возвращает bool и принимает единственный параметр:// Этот делегат используется методом FindAll()
// для извлечения подмножества.
public delegate bool Predicate
Когда вызывается FindAll()
List передается методу, указанному объектом Predicate. Реализация упомянутого метода будет выполнять некоторые вычисления для проверки соответствия элемента данных заданному критерию, возвращая в результате true или false. Если метод возвращает true, то текущий элемент будет добавлен в новый объект List, который представляет интересующее подмножество.Прежде чем мы посмотрим, как лямбда-выражения могут упростить работу с методом FindAll()
Program метод (TraditionalDelegateSyntax()), который взаимодействует с типом System.Predicate для обнаружения четных чисел в списке List целочисленных значений:using System;
using System.Collections.Generic;
using LambdaExpressions;
Console.WriteLine("***** Fun with Lambdas *****\n");
TraditionalDelegateSyntax();
Console.ReadLine();
static void TraditionalDelegateSyntax()
{