C#符号理解选择(int.Parse)

Ang*_*oft 6 c# linq lambda expression notation

我发现了一个我完全理解的小脚本.我有一个字符串,例如" 1 -2 5 40 ".它读取输入字符串,将其拆分为临时数组.然后解析该数组并将每个元素转换为整数.整个过程是将最接近的整数归零.

但我不明白的是符号Select(int.Parse).这里没有lambda表达式,并且不使用括号调用int.Parse方法.与OrderBy(Math.Abs​​)相同

提前谢谢=)

var temps = Console.ReadLine().Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries);  

var result = temps.Select(int.Parse)
.OrderBy(Math.Abs)
.ThenByDescending(x => x)
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

int.Parse是一个方法组 - 您所看到的是方法组转换为委托.要在没有LINQ的情况下看到它:

Func<string, int> parser = int.Parse;
int x = parser("10"); // x=10
Run Code Online (Sandbox Code Playgroud)

它大致相当于:

Func<string, int> parser = text => int.Parse(text);
Run Code Online (Sandbox Code Playgroud)

...虽然如果你想进入细节有很多差异:)


Pat*_*man 5

Select(int.Parse)几乎相当于Select(x => int.Parse(x)).

Select要求的Func<T, R>,在这种情况下也是签名int.Parse(它具有与一个返回值的单个参数).它将方法组转换为匹配的委托.

在这种情况下Func<T, R>将映射到Func<string, int>,因此它匹配int Parse(string)签名.