Язык программирования C#9 и платформа .NET5. Страница 248
В целях подготовки фундамента для изучения лямбда-выражений создайте новый проект консольного приложения по имени
LambdaExpressionsFindAll()List<T>// Метод класса System.Collections.Generic.List<T>.public List<T> FindAll(Predicate<T> match)Как видите, метод
FindAll()List<T>FindAll()System.Predicate<T>bool// Этот делегат используется методом FindAll()// для извлечения подмножества.public delegate bool Predicate<T>(T obj);Когда вызывается
FindAll()List<T>Predicate<T>truefalsetrueList<T>Прежде чем мы посмотрим, как лямбда-выражения могут упростить работу с методом
FindAll()ProgramTraditionalDelegateSyntax()System.Predicate<T>List<T>using System;using System.Collections.Generic;using LambdaExpressions;Console.WriteLine("***** Fun with Lambdas *****\n");TraditionalDelegateSyntax();Console.ReadLine();static void TraditionalDelegateSyntax(){<b> // Создать список целочисленных значений.</b> List<int> list = new List<int>(); list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });<b> // Вызвать FindAll() с применением традиционного синтаксиса делегатов.</b> Predicate<int> callback = IsEvenNumber; List<int> evenNumbers = list.FindAll(callback); Console.WriteLine("Here are your even numbers:"); foreach (int evenNumber in evenNumbers) { Console.Write("{0}\t", evenNumber); } Console.WriteLine();}<b>// Цель для делегата Predicate<>.</b>static bool IsEvenNumber(int i){ // Это четное число? return (i % 2) == 0;}Здесь имеется метод (
IsEvenNumber()%Наряду с тем, что такой традиционный подход к работе с делегатами ведет себя ожидаемым образом,
IsEvenNumber()FindAll()Programstatic void AnonymousMethodSyntax(){<b> // Создать список целочисленных значений.</b> List<int> list = new List<int>(); list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });<b> // Теперь использовать анонимный метод.</b> List<int> evenNumbers = list.FindAll(delegate(int i) { return (i % 2) == 0; } ); // Вывести четные числа Console.WriteLine("Here are your even numbers:"); foreach (int evenNumber in evenNumbers) { Console.Write("{0}\t", evenNumber); } Console.WriteLine();}В данном случае вместо прямого создания объекта делегата
Predicate<T>delegatePredicate<T>
Перейти на страницу:
Изменить размер шрифта: