C#泛型 - 为什么lambda工作,简单方法不工作?

Meh*_*dad 18 c# generics type-inference

我无法理解为什么C#编译器可以推断出类型

Array.ConvertAll(new int[1], i => Convert.ToDouble(i));
Run Code Online (Sandbox Code Playgroud)

但不是

Array.ConvertAll(new int[1], Convert.ToDouble);
Run Code Online (Sandbox Code Playgroud)

当看起来前者比后者更复杂的推论时.

有人可以解释为什么会这样吗?

RJ *_*han 11

此(已存档)博客文章中详细介绍了此问题:http://blogs.msdn.com/b/ericlippert/archive/2007/11/05/c-3-0-return-type-in​​ference-does-不工作-ON-成员groups.aspx

总而言之,据我了解(链接是否应该消失); 这是C#3.0中有意识的设计决策,因为它不适合在方法组(第二个例子)上执行类型推断.

我想很多人不喜欢这样,所以问题已经解决了C#4.0(从Visual Studio 2010开始);

"在C#4.0中,当方法组可以明确地与从委托推导出的一组完全固定的参数类型相关联时,返回类型推断对方法组参数起作用.一旦与方法组关联的参数类型已知,则重载解析可以明确地确定方法组中哪个方法是与委托形式参数相关联的方法;然后我们可以从特定方法到委托返回类型进行返回类型推断."