为什么匿名委托可以省略参数,而 lambda 不能
本文关键字:参数 不能 lambda 为什么 | 更新日期: 2023-09-27 18:24:47
//ok
Action<int> CallbackWithParam1 = delegate { };
//error CS1593: Delegate 'System.Action<int>' does not take 0 arguments
Action<int> CallbackWithParam2 = () => { };
只是想知道为什么真的有这种差异。
Jared当然是正确的。要添加更多详细信息:
- 几乎没有人使用"跳过参数列表"语法。
- 我们没有需要该功能的 lambda 方案。
- 该功能使类型推断和重载解析复杂化,并使两者更有可能失败。
- 您希望该功能采用什么语法?
Action<int> c = => {};
???我不想=>
变成一元前缀运算符。
因此,一方面,我们有优点列表:
- Lambdas与一个不必要的C# 2.0功能保持一致,几乎没有人知道或使用 - 坦率地说,我们希望我们一开始就没有做过这个功能。
缺点:
- 实现使已经复杂的类型推理和重载解析算法复杂化
- 功能为没有相应表示能力增益的用户带来了更多错误的可能性。
- 没有明显好的语法
如果给你这份利弊清单,你会怎么做? 我希望"实现该功能"不是您的选择;这不是我们的。
它本质上很简单,因为它们是具有不同受支持方案集的不同功能。 这几乎就像问
为什么 lambda 可以是表达式,而委托只能是块?