我很难理解为什么C#编译器可以推断
Array.ConvertAll(new int[1], i => Convert.ToDouble(i));
但不是为了
Array.ConvertAll(new int[1], Convert.ToDouble);
当前者看起来比后者更复杂的推论时。
有人能解释一下为什么会发生这种情况吗?
发布于 2012-06-01 11:33:52
这个问题在这篇(归档的)博客文章中有很好的介绍:http://blogs.msdn.com/b/ericlippert/archive/2007/11/05/c-3-0-return-type-inference-does-not-work-on-member-groups.aspx
总之,根据我的理解(如果链接消失了);这是C# 3.0中的一个有意识的设计决定,因为在方法组上执行类型推断是不合适的(你的第二个例子)。
我猜相当多的人不喜欢这样,所以这个问题在C# 4.0 (从Visual Studio2010开始)就解决了;
在C# 4.0中,当方法组可以明确地与从委托推导出的一组完全固定的参数类型相关联时,返回类型推断对方法组参数起作用。一旦知道与方法组相关联的参数类型,则重载解析可以明确地确定方法组中的哪个方法是与委托形参相关联的方法;然后,我们可以从特定方法到委托返回类型进行返回类型推断。
https://stackoverflow.com/questions/10843382
复制相似问题