csharplang/proposals/csharp-9.0/lambda-discard-parameters.md
Bill Wagner a88d56e313
fix a number of broken links (#3750)
These were found building dotnet/docs#19736

- Add correct folders for several spec references.
- Correct casing of one anchor tag.
- Replace absolute links with relative links.
2020-07-30 14:39:47 -04:00

2 KiB

Lambda discard parameters

Summary

Allow discards (_) to be used as parameters of lambdas and anonymous methods. For example:

  • lambdas: (_, _) => 0, (int _, int _) => 0
  • anonymous methods: delegate(int _, int _) { return 0; }

Motivation

Unused parameters do not need to be named. The intent of discards is clear, i.e. they are unused/discarded.

Detailed design

Method parameters In the parameter list of a lambda or anonymous method with more than one parameter named _, such parameters are discard parameters. Note: if a single parameter is named _ then it is a regular parameter for backwards compatibility reasons.

Discard parameters do not introduce any names to any scopes. Note this implies they do not cause any _ (underscore) names to be hidden.

Simple names If K is zero and the simple_name appears within a block and if the block's (or an enclosing block's) local variable declaration space (Declarations) contains a local variable, parameter (with the exception of discard parameters) or constant with name I, then the simple_name refers to that local variable, parameter or constant and is classified as a variable or value.

Scopes With the exception of discard parameters, the scope of a parameter declared in a lambda_expression (Anonymous function expressions) is the anonymous_function_body of that lambda_expression With the exception of discard parameters, the scope of a parameter declared in an anonymous_method_expression (Anonymous function expressions) is the block of that anonymous_method_expression.