为什么我可以调用Parse方法没有括号,因为该方法有4次重载?
例如在这种情况下:
string[] aTemp = Console.ReadLine().Split(' ');
int[] a = Array.ConvertAll(aTemp, int.Parse);
答案 0 :(得分:5)
ConvertAll
的签名实际上是这样的:
public static TOutput[] ConvertAll<TInput, TOutput>(
TInput[] array,
Converter<TInput, TOutput> converter
)
编译器可以推断出:
public static int[] ConvertAll<string, int>(
string[] array,
Converter<string, int> converter
)
来自Int32.Parse
的签名:
public static int Parse(
string s
)
如果你想长篇大论地写出来:
Converter<string, int> converter = new Converter<string, int>(Int32.Parse);
string[] aTemp = Console.ReadLine().Split(' ');
int[] a = Array.ConvertAll<string, int>(aTemp, converter);
注意:Converter<TInput, TOutput>
实际上是一个委托,它将TInput
类型的参数作为输入,并返回类型为TOutput
的值。
答案 1 :(得分:0)
Array.ConvertAll从TInput到TOutput接受两个参数,一个TInput数组和一个converter delegate。 int.Parse中只有one overload与转换器委托的签名匹配 -
public static int Parse(
string s
)
汇总所有可用信息,我们可以选择正确的方法来调用。