4

なぜこの C# は型チェックをしないのですか? string -> stringこの例では、タイプのメソッドをとして渡そうとしていFunc<string, string>ます。適切に型指定された関数の名前だけを渡すときに、ラムダ構文を省略できることは完全に理にかなっているように思えます。

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

1 に答える 1

6

C# 4 コンパイラを使用できます。C# 3 コンパイラでは、メソッド グループの変換に関する型推論が弱かった。Eric Lippert の回答で詳細を読むことができます。これが C# 3 コンパイラが実際に C# 3 仕様を実装していないことを意味するのか、それとも仕様自体がこの領域で 3 と 4 の間で変更されたのかは、私には完全には明らかではありません。これは、コンパイラが希望どおりに動作するかどうかに比べれば、かなり学術的な問題です ;)

(テストしたところ、あなたのプログラムは VS 2008 ではコンパイルされませんが、VS 2010 ではコンパイルされます。)

于 2010-07-08T09:24:31.603 に答える