C# 泛型 -- 为什么 lambda 有效,而简单方法不起作用

本文关键字:简单 方法 不起作用 有效 泛型 为什么 lambda | 更新日期: 2023-09-27 18:35:52

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

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

但不适用于

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

当前者似乎比后者更复杂的推论时。

有人可以解释为什么会发生这种情况吗?

C# 泛型 -- 为什么 lambda 有效,而简单方法不起作用

这个问题在这篇(存档的)博客文章中得到了很好的介绍: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 Studio 2010 开始);

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