Читайте также:
|
|
В этом примере мы найдем всех студентов в коллекции, которые учатся в группе 321.
Класс List<T> представляет методы Find() и FindAll() со следующими объявлениями:
public T Find(Predicate<T> match);
public List<T> FindAll(Predicate<T> match);
Оба метода требуют аргумента Predicate<T>. Тип Predicate<T> является делегатом, который ссылается на метод-предикат. Предикат — это метод, возвращающий булевское значение. Если предикат возвращает true, значит соответствие обнаружено и элемент найден. Если он возвращает false, то элемент не добавляется к результату поиска. В соответствии со своим определением, Predicate<T> должен иметь единственный аргумент типа Т. Метод Find() возвращает первый элемент, соответствующий предикату, a FindAll() — все соответствующие предикату элементы в списке-коллекции.
Итак, нам нужно определить предикат. Мы используем метод предиката StudentPredicate() для поиска студентов, обучающихся в определенной группе. Метод определен в классе FindStudent, который инициализируется номером студенческой группы. StudentPredicate() принимает объект Student, сравнивает группу студента с той, что была задана в аргументе конструктора, и возвращает true или false:
class FindStudent
{
private string group;
public FindStudent(string group)
{
this.group = group;
}
public bool StudentPredicate(Student student)
{
return student.Group == group;
}
}
Чтобы найти нужных студентов, класс FindStudent инициализируется номером группы — 321, поскольку нам нужны студенты, которые учатся в группе 321. Методом FindAll() класса List<T> создается новый экземпляр делегата предиката, и этот делегат принимает метод finder. StudentPredicate. FindAll() возвращает список типа List < Student >, который используется в цикле foreach для итерации по всем найденным гонщикам и выдачи их на консоль:
FindStudent finder = new FindStudent("321");
foreach (Student st in students.FindAll(new Predicate<Student>(finder.StudentPredicate)))
Console.WriteLine(st);
Результат работы программы приведен на рис. 7.2.
Рис. 7.2. Результаты поиска студентов группы 321
Дата добавления: 2015-07-07; просмотров: 134 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Обзор обобщенных коллекций | | | Сортировка |