Lambda negeert parameters
Notitie
Dit artikel is een functiespecificatie. De specificatie fungeert als het ontwerpdocument voor de functie. Het bevat voorgestelde specificatiewijzigingen, samen met informatie die nodig is tijdens het ontwerp en de ontwikkeling van de functie. Deze artikelen worden gepubliceerd totdat de voorgestelde specificaties zijn voltooid en opgenomen in de huidige ECMA-specificatie.
Er kunnen enkele verschillen zijn tussen de functiespecificatie en de voltooide implementatie. Deze verschillen worden vastgelegd in de relevante LDM-notities (Language Design Meeting).
Meer informatie over het proces voor het aannemen van functiespeclets in de C#-taalstandaard vindt u in het artikel over de specificaties.
Probleem met kampioen: https://github.com/dotnet/csharplang/issues/111
Samenvatting
Toestaan dat discards (_
) worden gebruikt als parameters van lambdas en anonieme methoden.
Bijvoorbeeld:
- lambdas:
(_, _) => 0
,(int _, int _) => 0
- anonieme methoden:
delegate(int _, int _) { return 0; }
Motivatie
Ongebruikte parameters hoeven niet benoemd te worden. Het doel van afgekeurde items is duidelijk, namelijk dat ze ongebruikt zijn of weggegooid worden.
Gedetailleerd ontwerp
Methodeparameters - §15.6.2 In de parameterlijst van een lambda of anonieme methode met meer dan één parameter met de naam _
, zijn dergelijke parameters verwijderingsparameters.
Opmerking: als één parameter de naam _
heeft, is het een reguliere parameter om achterwaartse compatibiliteitsredenen.
Parameters voor verwijderen introduceren geen namen in enige scopes.
Let op, dit betekent dat ze geen _
(onderstrepingsteken) namen verbergen.
Eenvoudige namen (§12.8.4) Als K
nul is en de simple_name binnen een blok wordt weergegeven en als het blok's (of een insluitend blok's) lokale variabeledeclaratieruimte (Declaraties - §7.3) een lokale variabele bevat, parameter (met uitzondering van verwijderingsparameters) of constante met naam I
, vervolgens verwijst de simple_name naar die lokale variabele, parameter of constante en wordt geclassificeerd als een variabele of waarde.
Bereiken - §7.7 Met uitzondering van verwijderingsparameters, het bereik van een parameter die is gedeclareerd in een lambda_expression (§12.19) is de anonymous_function_body van die lambda_expression Met uitzondering van verwijderingsparameters is het bereik van een parameter die is gedeclareerd in een anonymous_method_expression (§12.19) het blok van dat anonymous_method_expression.
Verwante specificatiesecties
- Corresponderende parameters - §12.6.2.2
C# feature specifications