Lambda 弃元参数
注意
本文是特性规范。 此规范是功能的设计文档。 它包括建议的规范变更,以及功能设计和开发过程中所需的信息。 这些文章将持续发布,直至建议的规范变更最终确定并纳入当前的 ECMA 规范。
功能规范与已完成的实现之间可能存在一些差异。 这些差异记录在相关的语言设计会议 (LDM) 说明中。
可以在有关规范的文章中了解更多有关将功能规范子块纳入 C# 语言标准的过程。
支持者问题:https://github.com/dotnet/csharplang/issues/111
总结
允许将丢弃 (_
) 用作 lambda 和匿名方法的参数。
例如:
- Lambda:
(_, _) => 0
、(int _, int _) => 0
- 匿名方法:
delegate(int _, int _) { return 0; }
动机
未使用的参数不需要命名。 丢弃物的意图很明显,即它们是未使用或被丢弃的。
详细设计
方法参数 - §15.6.2 在具有多个名为 _
的参数的 Lambda 或匿名方法参数列表中,此类参数是放弃参数。
注意:如果单个参数命名为 _
,则出于向后兼容性的原因,它是一个常规参数。
放弃参数不会向任何范围引入任何名称。
请注意,这意味着它们不会导致隐藏任何 _
(下划线)名称。
简单名称(§12.8.4)如果 K
为零,并且 简单名称 出现在 块 中,而 块(或封闭的 块)的本地变量声明空间(Declarations - §7.3)中包含具有名称 I
的局部变量、参数(不包括丢弃参数)或常量,那么 简单名称 就引用该局部变量、参数或常量,并被归类为变量或值。
范围 - §7.7 除了丢弃参数以外,lambda_expression (§12.19) 中声明的参数范围是该 lambda_expression 的 anonymous_function_body 除了丢弃参数以外,anonymous_method_expression (§12.19) 中声明的参数范围是该 anonymous_method_expression 的块。
相关规范部分
- 相应的参数 - §12.6.2.2