繁体   English   中英

此C#3.0代码有什么问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM