我很好奇为什么C#允许我在某些情况下忽略委托参数,而不是其他情况。我可以使用lambda语法忽略委托参数吗?
例如,这是允许的:
Action<int> action = delegate { Console.WriteLine("delegate"); };
但这不是:
Action<int> action =() => Console.WriteLine("lambda");
有没有一种方法来初始化一个委托,并使用Lambda忽略的参数?我知道我可以给lambda添加一个参数并修复上一行,但这更多的是与编译器有关的学术问题,以及它为什么或如何工作。
这是否是正确与否取决于你如何看答案。生成的IL是*绝对*仅用于采用int的方法。编译器*知道它试图将其转换为的编译时类型 - 如果将操作签名更改为“委托”,则会发生编译时错误。 – 2009-07-04 05:59:16
我的意思是(我想我说的)是通过在第一个示例中省略委托的参数列表,编译器在创建方法时填入它,以便它匹配所需的签名。 Lambda表达式不允许您省略参数列表 - 一个空列表推断不带参数的方法 - 因此会导致编译时错误。 – tvanfosson 2009-07-04 14:43:21