Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе представлен обзор универсальных делегатов для преобразований, предикатов поиска и действий, выполняемых для элементов массива или коллекции.
Универсальные делегаты для обработки массивов и списков
Action<T> Универсальный делегат представляет метод, который выполняет некоторые действия для элемента указанного типа. Можно создать метод, выполняющий требуемое действие в элементе, создать экземпляр делегата Action<T> для представления этого метода, а затем передать массив и делегат в статический Array.ForEach универсальный метод. Метод вызывается для каждого элемента массива.
Универсальный класс List<T> также предоставляет метод ForEach, использующий делегат Action<T>. Этот метод не является универсальным.
Замечание
Это подчеркивает интересный момент о универсальных типах и методах. Метод Array.ForEach должен быть статическим (Shared
в Visual Basic) и универсальным, так как Array не является универсальным типом. Единственная причина, с которой можно указать тип для Array.ForEach работы, заключается в том, что метод имеет собственный список параметров типа. Напротив, негенерический List<T>.ForEach метод принадлежит универсальному классу List<T>, поэтому он просто использует параметр типа своего класса. Класс строго типизирован, поэтому метод может быть методом экземпляра.
Универсальный Predicate<T> делегат представляет метод, определяющий, соответствует ли определенный элемент определенным критериям. Его можно использовать со следующими статическими универсальными методами Array для поиска элемента или набора элементов: Exists, , FindFindAll, FindIndexFindLast, FindLastIndexи TrueForAll.
Predicate<T> также работает с соответствующими негенерическими методами экземпляра универсального List<T> класса.
Comparison<T> Универсальный делегат позволяет указать порядок сортировки для элементов массива или списка, которые не имеют собственного порядка сортировки, или переопределить собственный порядок сортировки. Создайте метод, выполняющий сравнение, создайте экземпляр делегата Comparison<T> для представления метода, а затем передайте массив и делегат в статический универсальный метод Array.Sort<T>(T[], Comparison<T>). Универсальный List<T> класс предоставляет соответствующую перегрузку метода экземпляра, List<T>.Sort(Comparison<T>).
Converter<TInput,TOutput> Универсальный делегат позволяет определить преобразование между двумя типами и преобразовать массив одного типа в массив другой или преобразовать список одного типа в список других. Создайте метод, который преобразует элементы существующего списка в новый тип, создайте экземпляр делегата для представления метода и используйте Array.ConvertAll универсальный статический метод для создания массива нового типа из исходного массива или List<T>.ConvertAll<TOutput>(Converter<T,TOutput>) метода универсального экземпляра для создания списка нового типа из исходного списка.
Цепочки делегатов
Многие методы, использующие эти делегаты, возвращают массив или список, которые можно передать другому методу. Например, если вы хотите выбрать определенные элементы массива, преобразовать эти элементы в новый тип и сохранить их в новом массиве, можно передать массив, возвращаемый универсальным FindAll методом в ConvertAll универсальный метод. Если новый тип элемента не имеет естественного порядка сортировки, можно передать массив, который возвращает универсальный метод ConvertAll, в универсальный метод Sort<T>(T[], Comparison<T>).