[英]What is wrong in this c# 3.0 code?
我下面有这段代码。
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表达式?
您的第二个示例应该是:
TestDel td = (string name) => { Console.WriteLine(name); };
由于匿名方法是使用delegate
关键字创建的: http : //msdn.microsoft.com/zh-cn/library/0yw3tz5k%28v=vs.80%29.aspx这就是该语言的工作方式。
Lambda表达式和匿名方法是单独的语言功能。 Lambda看起来像这样:
a => Something(a)
匿名方法如下所示:
delegate (string a) { Something(a); }
可以将其视为匿名类型和类之间的区别,其中lambda是匿名方法,而委托是类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.