为什么匿名委托可以省略参数,但lambdas不能?
//ok Action CallbackWithParam1 = delegate { }; //error CS1593: Delegate 'System.Action' does not take 0 arguments Action CallbackWithParam2 = () => { };
只是想知道为什么差异真的。 : – /
贾里德当然是对的。 要添加更多详细信息:
- 几乎没有人使用“跳过参数列表”语法。
- 我们没有lambda 需要该function的场景。
- 该function使类型推断和重载分辨率复杂化,并使两者都更有可能失败。
- 您希望该function使用什么语法?
Action
??? 我不希望将c = => {}; =>
变成一元前缀运算符。
所以一方面我们有专业人士名单:
- Lambdas与不必要的任何人都知道或使用的不必要的C#2.0function保持一致 – 坦率地说,我们希望我们从未做过这样的function
和缺点:
- 实现使已经复杂的类型推断和重载决策算法复杂化
- function导致用户更多的bug可能性,代表功率没有相应的增益。
- 没有明显好的语法
如果你被列出了利弊列表,你会做什么? 我希望“实现function”不是你的选择; 这不是我们的。
它本质上很简单,因为它们是具有不同支持方案集的不同function。 这几乎就像问
为什么lambda是表达式,但委托只能是块?