我很难理解为什么C#编译器可以推断类型
Array.ConvertAll(new int[1], i => Convert.ToDouble(i));
但不适用于
Array.ConvertAll(new int[1], Convert.ToDouble);
有时似乎前者比后者更复杂,为什么会这样?
我很难理解为什么C#编译器可以推断类型
Array.ConvertAll(new int[1], i => Convert.ToDouble(i));
但不适用于
Array.ConvertAll(new int[1], Convert.ToDouble);
有时似乎前者比后者更复杂,为什么会这样?
这个问题在这篇(已存档)博客文章中有详细介绍: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 中,当方法组可以与从委托中推导出的完全固定的参数类型相关联时,返回类型推断会作用于方法组参数。一旦与方法组相关联的参数类型已知,超载解析就可以明确地确定哪个方法与委托形式参数相关联;然后我们可以从指定的方法到委托返回类型进行返回类型推断。”