开发者

Why can't I pass just the name of a method where a similarly typed Func is expected?

开发者 https://www.devze.com 2023-01-06 20:58 出处:网络
Why doesn\'t this C# typecheck? In this example, I am trying to pass a 开发者_如何学Gomethod of type string -> string as a Func<string, string>. It would be seem perfectly reasonable to be ab

Why doesn't this C# typecheck? In this example, I am trying to pass a 开发者_如何学Gomethod of type string -> string as a Func<string, string>. It would be seem perfectly reasonable to be able to omit lambda syntax when passing just the name of an appropriately typed function.

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";
  }
}


You can using the C# 4 compiler. The C# 3 compiler had weaker type inference around method group conversions. You can read the details in Eric Lippert's answer here. It's not entirely clear to me whether this means that the C# 3 compiler doesn't actually implement the C# 3 spec, or whether the spec itself changed between 3 and 4 in this area. That's a pretty academic question compared with whether or not the compiler does what you want it to ;)

(I've just tested it, and your program doesn't compile with VS 2008, but does compile with VS 2010.)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号