这是泛型类中的泛型方法。
通常,在类型或方法的名称后面给出泛型类型或方法的类型参数列表。检查以上内容:
List<TOutput> ConvertAll<TOutput>(Converter<T, TOutput> converter)
在此实例中,类型参数位于方法名称ConvertAll
之后。无论您拨打ConvertAll
时使用什么类型,都将用于确定结果类型。这里的单个参数是一个函数,它需要一个T
(列表中的项目类型)并返回TOutput
。这是针对列表中的每个项目运行的,并且结果以新的List<TOutput>
返回。
这里的用法的示例:
List<int> intlist = new List<int> { 1, 2, 3, 4, 5 };
List<double> converted = intlist.ConvertAll<double>(i => (double)i);
在这种情况下,类型double
已经被代替类型参数TOutput
,并且int
是List
的T
参数,所以通用方法的有效签名请拨打:
List<double> ConvertAll(Converter<int, double> converter)
在许多情况下,编译器会根据参数返回的类型找出您的类型参数R,所以你可以经常跳过明确说明符这样的:
List<double> converted = intlist.ConvertAll(i => (double)i);
通用方法,使您能够灵活而不List<T>
类需要有明确的处理程序为它指定任何类型的转换。就像您可以创建任何类型的List
一样,您可以将任何输出类型的转换函数传递到ConvertAll
,并且会很乐意为您处理它,并返回适当类型的List
。
但是没有列出它自己有一个?那么还不足以说明它的类型吗? –
ConfusedSleepyDeveloper
'List'只消耗该方法声明的泛型类型。该通用类型的实际声明在'ConvertAll '中。 –
其实,这就是你如何使用'ConvertAll'。请参阅[MSDN]中的示例(http://msdn.microsoft.com/zh-cn/library/73fe8cwf%28v=vs.110%29.aspx)。你不需要指定类型,因为它可以通过参数来推断(类型'Convert' –