我在下面有这段代码。
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表达式使用委托?
答案 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是匿名方法,委托是类。