Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
В целях подготовки фундамента для изучения лямбда-выражений создайте новый проект консольного приложения по имени
LambdaExpressions
FindAll()
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>
true
false
true
List<T>
Прежде чем мы посмотрим, как лямбда-выражения могут упростить работу с методом
FindAll()
Program
TraditionalDelegateSyntax()
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()
Program
static 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>
delegate
Predicate<T>