这个c#3.0代码有什么问题?

时间:2012-07-07 15:15:51

标签: c# c#-3.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表达式使用委托?

3 个答案:

答案 0 :(得分:3)

你的第二个例子应该是:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

Lambda表达式和匿名方法是单独的语言功能。 lambda看起来像这样:

a => Something(a)

匿名方法如下所示:

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

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