Dela via


Lambda-bortkastade parametrar

Anteckning

Den här artikeln är en funktionsspecifikation. Specifikationen fungerar som designdokument för funktionen. Den innehåller föreslagna specifikationsändringar, tillsammans med information som behövs under utformningen och utvecklingen av funktionen. Dessa artiklar publiceras tills de föreslagna specifikationsändringarna har slutförts och införlivats i den aktuella ECMA-specifikationen.

Det kan finnas vissa skillnader mellan funktionsspecifikationen och den slutförda implementeringen. Dessa skillnader samlas in i de relevanta anteckningarna från LDM (Language Design Meeting).

Du kan läsa mer om processen för att införa funktionsspecifikationer i C#-språkstandarden i artikeln om specifikationerna.

Champion-problem: https://github.com/dotnet/csharplang/issues/111

Sammanfattning

Tillåt att utsläpp (_) används som parametrar för lambdas och anonyma metoder. Till exempel:

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

Motivation

Oanvända parametrar behöver inte namnges. Avsikten med bortskaffande är tydlig, dvs. de är oanvända/slängs.

Detaljerad design

Metodparametrar – §15.6.2 I parameterlistan över en lambda- eller anonym metod med mer än en parameter med namnet _är sådana parametrar parametrar som ignoreras. Obs! Om en enskild parameter heter _ är det en vanlig parameter av bakåtkompatibilitetsskäl.

Parametrar som ignoreras introducerar inga namn i något omfång. Observera att detta innebär att de inte orsakar att några _ (understreck) namn döljs.

Enkla namn (§12.8.4) Om K är noll och simple_name visas inom ett block och om blocket's (eller en omslutande blockera's) lokalt variabeldeklarationsutrymme (Deklarationer - §7.3) innehåller en lokal variabel, parameter (med undantag för ignorera parametrar) eller konstant med namnet I, sedan refererar simple_name till den lokala variabeln, parametern eller konstanten och klassificeras som en variabel eller ett värde.

Omfattningar – §7.7 Med undantag för parametrar som tas bort omfånget för en parameter som deklarerats i en lambda_expression (§12.19) är anonymous_function_body av den lambda_expression Med undantag för parametrar som ignoreras är omfattningen av en parameter som deklareras i en anonymous_method_expression (§12.19) block av den anonymous_method_expression.