首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#泛型--为什么lambda可以工作,而简单的方法却不行?

C#泛型--为什么lambda可以工作,而简单的方法却不行?
EN

Stack Overflow用户
提问于 2012-06-01 09:36:06
回答 1查看 357关注 0票数 18

我很难理解为什么C#编译器可以推断

代码语言:javascript
复制
Array.ConvertAll(new int[1], i => Convert.ToDouble(i));

但不是为了

代码语言:javascript
复制
Array.ConvertAll(new int[1], Convert.ToDouble);

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

有人能解释一下为什么会发生这种情况吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中,当方法组可以明确地与从委托推导出的一组完全固定的参数类型相关联时,返回类型推断对方法组参数起作用。一旦知道与方法组相关联的参数类型,则重载解析可以明确地确定方法组中的哪个方法是与委托形参相关联的方法;然后,我们可以从特定方法到委托返回类型进行返回类型推断。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10843382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档