18

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

Array.ConvertAll(new int[1], i => Convert.ToDouble(i));

但不是为了

Array.ConvertAll(new int[1], Convert.ToDouble);

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

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

4

1 回答 1

11

这个(存档的)博客文章很好地涵盖了这个问题:http: //blogs.msdn.com/b/ericlippert/archive/2007/11/05/c-3-0-return-type-in​​ference -does-不工作的成员-groups.aspx

总而言之,据我了解(如果链接消失了);这是 C# 3.0 中的一个有意识的设计决定,因为在方法组(您的第二个示例)上执行类型推断是不合适的。

我猜很多人不喜欢这样,所以这个问题在 C# 4.0 中得到了解决(从 Visual Studio 2010 开始);

“在 C# 4.0 中,当方法组可以明确地与从委托推导出的一组完全固定的参数类型相关联时,返回类型推断适用于方法组参数。一旦与方法组关联的参数类型已知,则重载决议可以明确地确定方法组中的哪个方法与委托形式参数相关联;然后我们可以从特定方法到委托返回类型进行返回类型推断。”

于 2012-06-01T03:33:51.713 回答