为什么匿名委托可以省略参数,但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是表达式,但委托只能是块?