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_expressionanonymous_function_body 除了丢弃参数以外,anonymous_method_expression (§12.19) 中声明的参数范围是该 anonymous_method_expression