Condividi tramite


Parametri di eliminazione lambda

Nota

Questo articolo è una specifica di funzionalità. La specifica funge da documento di progettazione per la funzionalità. Include le modifiche specifiche proposte, insieme alle informazioni necessarie durante la progettazione e lo sviluppo della funzionalità. Questi articoli vengono pubblicati fino a quando le modifiche specifiche proposte non vengono completate e incorporate nella specifica ECMA corrente.

Potrebbero verificarsi alcune discrepanze tra la specifica di funzionalità e l'implementazione completata. Tali differenze vengono acquisite nelle note language design meeting (LDM) pertinenti.

Maggiori informazioni sul processo di adozione delle specifiche delle funzionalità nello standard C# sono disponibili nell'articolo sulle specifiche di .

Sommario

Consenti di utilizzare discard (_) come parametri di espressioni lambda e metodi anonimi. Per esempio:

  • lambda: (_, _) => 0, (int _, int _) => 0
  • metodi anonimi: delegate(int _, int _) { return 0; }

Motivazione

Non è necessario assegnare un nome ai parametri inutilizzati. L'intento degli scarti è chiaro, cioè sono non utilizzati o eliminati.

Progettazione dettagliata

Parametri del metodo: §15.6.2 Nell'elenco di parametri di un metodo lambda o anonimo con più di un parametro denominato _, tali parametri vengono eliminati. Nota: se un singolo parametro è denominato _, è un parametro regolare per motivi di compatibilità con le versioni precedenti.

I parametri discard non introducono nomi in alcun ambito. Si noti che ciò implica che non causano l'occultamento di alcun nome di _ (carattere di sottolineatura).

Nomi semplici (§12.8.4) Se K è zero e il simple_name viene visualizzato all'interno di un blocco e se il blocco (o un blocco contenitore's) spazio di dichiarazione delle variabili locali (dichiarazioni - §7.3) contiene una variabile locale, parametro (ad eccezione dei parametri discard) o costante con nome I, quindi il simple_name fa riferimento a tale variabile locale, parametro o costante e viene classificato come variabile o valore.

Ambiti - §7.7 Ad eccezione dei parametri di eliminazione, l'ambito di un parametro dichiarato in un lambda_expression (§12.19) è il anonymous_function_body di tale lambda_expression Con l'eccezione dei parametri discard, l'ambito di un parametro dichiarato in un anonymous_method_expression (§12.19) è il blocco di tale anonymous_method_expression.

  • Parametri corrispondenti - §12.6.2.2