C# - .Select(int.Parse),编译器错误cs0411

Pay*_*gen 1 c# linq select

我刚刚读过这个问题: 使用LINQ在一行代码中将string []转换为int []

有一个字符串数组:

var arr = new string[] { "1", "2", "3", "4" };
Run Code Online (Sandbox Code Playgroud)

其中一个可接受的答案是:

int[] myInts = arr.Select(int.Parse).ToArray();
Run Code Online (Sandbox Code Playgroud)

我自己尝试了并收到了cs04011编译器错误:

string str = "4 8 15 16 23 42";
int[] intArray = str.Split(' ').Select(int.Parse).ToArray();
Run Code Online (Sandbox Code Playgroud)

这是页面,描述了这个编译器错误: MSDN

如果我这样做,它工作正常:

int[] intArray = str.Split(' ').Select(p=>int.Parse(p)).ToArray();
Run Code Online (Sandbox Code Playgroud)

我想知道,为什么接受上一个问题的asnwer工作正常并且我收到错误?

我的猜测是我的视觉工作室(2008年表达,目标框架= 3.5)并不好,但我没有找到任何证据.

提前致谢!

Jon*_*eet 10

简短的回答是:C#类型推断和对方法组转换的支持随着时间的推移而得到改善.您仍在使用C#3编译器(这是VS 2008中提供的编译器).确切的细节是棘手的,我永远无法记住规范中确切的变化 - 类型推断是规范的一个比较繁琐的部分,并且它无论如何都不能完全正确地描述预期的行为,就我而言知道的.

如果您使用更新的编译器遵循更新的语言规则,那就没问题了.这依赖于您要定位的框架的版本 - 此处只有编译器/语言版本相关.

我强烈建议直接升级到Visual Studio 2015 - C#6有一些可爱的功能,用于删除代码中的残缺...