用于操作数组和列表的泛型委托

更新:2007 年 11 月

本主题概述用于转换、搜索谓词以及对数组或集合的元素执行操作的泛型委托。

用于操作数组和列表的泛型委托

Action<T> 泛型委托表示对指定类型的元素执行某些操作的方法。可以创建对元素执行所需操作的方法,创建 Action<T> 委托的实例来表示该方法,然后将数组和委托传递给 Array.ForEach<T> 静态泛型方法。对该数组的每个元素调用该方法。

List<T> 泛型类还提供了一个使用 Action<T> 委托的 ForEach 方法。此方法不是泛型方法。

说明:

这是泛型类型和方法的有趣的一点。Array.ForEach<T> 方法必须是静态的(在 Visual Basic 中为 Shared)和泛型的,因为 Array 不是泛型类型;可以指定 Array.ForEach<T> 操作的类型的唯一原因是该方法具有其自己的类型参数列表。与之相反,非泛型 List<T>.ForEach 方法属于泛型类 List<T>,因此它只是使用它的类的类型参数。该类是强类型的,因此该方法可以是实例方法。

Predicate<T> 泛型委托表示用于确定特定元素是否满足您定义的标准的方法。可以将其与 Array 的下列静态泛型方法一起使用来搜索元素或元素集:Exists<T>Find<T>FindAll<T>FindIndexFindLast<T>FindLastIndexTrueForAll<T>

Predicate<T> 还可以与 List<T> 泛型类的相应的非泛型实例方法一起使用。

Comparison<T> 泛型委托允许为没有本机排序顺序的数组或列表元素提供排序顺序或者重写本机排序顺序。创建执行比较的方法,创建 Comparison<T> 委托的实例来表示该方法,然后将数组和委托传递给 Array.Sort<T>(array<T[], Comparison<T>) 静态泛型方法。List<T> 泛型类提供了相应的实例方法重载 List<T>.Sort(Comparison<T>)

Converter<TInput, TOutput> 泛型委托允许定义两种类型之间的转换,并允许将一种类型的数组转换为另一种类型的数组,或者将一种类型的列表转换为另一种类型的列表。创建一个将现有列表的元素转换为新类型的方法,创建委托实例来表示该方法,然后使用 Array.ConvertAll<TInput, TOutput> 泛型静态方法从原数组生成新类型的数组,或者使用 List<T>.ConvertAll<TOutput> 泛型实例方法从原列表生成新类型的列表。

链接委托

许多使用这些委托的方法返回数组或列表,数组或列表又可以传递给另一个方法。例如,如果您要选择数组的特定元素,将这些元素转换为一种新类型并保存在新数组中,您可以将 FindAll<T> 泛型方法返回的数组传递给 ConvertAll<TInput, TOutput> 泛型方法。如果新元素类型缺少自然的排序顺序,则可以将 ConvertAll<TInput, TOutput> 泛型方法返回的数组传递给 Sort<T>(array<T[], Comparison<T>) 泛型方法。

请参见

概念

.NET Framework 中的泛型概述

.NET Framework 中的泛型集合

泛型接口

泛型的优点和限制

参考

System.Collections.Generic

System.Collections.ObjectModel

其他资源

.NET Framework 中的泛型