为什么我不能只传递一个预期类似类型的Func的方法的名称?

时间:2010-07-08 09:16:07

标签: c# mono gmcs

为什么不用这个C#typecheck?在此示例中,我尝试将string -> string类型的方法作为Func<string, string>传递。在传递恰当类型的函数的名称时,能够省略lambda语法似乎是完全合理的。

using System;
using System.Linq;

class WeakInference
{
  public static void Main (string [] args)
  {
    // doesn't typecheck
    var hellos = args.Select (AppendHello); 

    // have to do this:
    // var hellos = args.Select (s => AppendHello (s));
  }

  static string AppendHello (string s)
  {
    return s + "hello";
  }
}

1 个答案:

答案 0 :(得分:6)

您可以使用C#4编译器。 C#3编译器在方法组转换方面的类型推断较弱。您可以在Eric Lippert's answer here中阅读详细信息。我不完全清楚这是否意味着C#3编译器实际上没有实现C#3规范,或者规范本身是否在这个区域中在3和4之间变化。与编译器是否按照想要进行操作相比,这是一个非常学术性的问题;)

(我刚测试过,你的程序不能用VS 2008编译,但是用VS 2010编译。)