此主题概述了用于转换的泛型委托、搜索谓词以及对数组或集合中的元素所采取的操作。
用于操作数组和列表的泛型委托
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、FindIndex、FindLast、 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>) 泛型实例方法从原始列表中生成新类型的列表。
链接委托
许多使用这些委托的方法返回数组或列表,这些数组或列表可以传递给其他方法。 例如,如果要选择数组的某些元素,将这些元素转换为新类型,并将其保存在新数组中,则可以将泛型方法返回的FindAllConvertAll数组传递给泛型方法。 如果新元素类型缺少自然排序顺序,可以将泛型方法返回的ConvertAllSort<T>(T[], Comparison<T>)数组传递给泛型方法。