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 ,它首先是通过使用一个很好的 lambda 表达式创建的。但是我使用匿名方法的第二种方法不会编译,但如果像下面这样:

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

然后一切都很好,我的困惑是为什么我可以使用 lambda 表达式而不是匿名方法,而它们是相同的,为什么我需要使用匿名方法而不是 lambda 表达式?

4

3 回答 3

3

你的第二个例子应该是:

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

因为匿名方法使用delegate关键字创建的:http: //msdn.microsoft.com/en-us/library/0yw3tz5k%28v=vs.80%29.aspx这就是语言的工作原理。

于 2012-07-07T15:21:36.010 回答
1

Lambda 表达式和匿名方法是不同的语言特性。一个 lambda 看起来像这样:

a => Something(a)

匿名方法如下所示:

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

可以将其视为匿名类型和类之间的区别,其中 lambda 是匿名方法,而委托是类。

于 2012-07-07T15:26:47.290 回答