0

私はこのコードを以下に持っています。

 delegate void TestDel(string str);
        static void Main(string[] args)
        {
            TestDel td = name=> Console.WriteLine(name);
            TestDel td = (string name) { Console.WriteLine(name);}
            td("hello");
            Console.ReadLine();
        }

ここにデリゲートTestDelがあります。これは、うまくいくラムダ式を使用して最初に作成されます。しかし、私が匿名のメソッドを使用している2番目のメソッドはコンパイルされませんが、以下のようにすると:

TestDel td = delegate(string name) { Console.WriteLine(name);};

それならすべてがうまくいきます、私の混乱は、なぜそれらが同じであるのに匿名メソッドではなくラムダ式を使用できるのか、なぜラムダ式ではなく匿名メソッドでデリゲートを配置する必要があるのですか?

4

3 に答える 3

3

2番目の例は次のようになります。

TestDel td = (string name) => { Console.WriteLine(name); };
于 2012-07-07T15:25:01.440 に答える
2

匿名メソッドは次のキーワードを使用して作成されるため:http: //msdn.microsoft.com/en-us/library/0yw3tz5k%28v=vs.80%29.aspxこのように言語が機能します。delegate

于 2012-07-07T15:21:36.010 に答える
1

ラムダ式と無名メソッドは別々の言語機能です。ラムダは次のようになります。

a => Something(a)

そして、匿名のメソッドは次のようになります。

delegate (string a) { Something(a); }

これは、匿名タイプとクラスの違いと考えてください。ラムダは匿名メソッドであり、デリゲートはクラスです。

于 2012-07-07T15:26:47.290 に答える