int.Parse方法没有括号

时间:2017-03-22 19:06:21

标签: c# parsing methods

为什么我可以调用Parse方法没有括号,因为该方法有4次重载?

例如在这种情况下:

string[] aTemp = Console.ReadLine().Split(' ');
int[] a = Array.ConvertAll(aTemp, int.Parse);

2 个答案:

答案 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
)

汇总所有可用信息,我们可以选择正确的方法来调用。