Compartir a través de


Parámetros de descarte lambda

Nota:

Este artículo es una especificación de características. La especificación actúa como documento de diseño de la característica. Incluye cambios de especificación propuestos, junto con la información necesaria durante el diseño y el desarrollo de la característica. Estos artículos se publican hasta que se finalizan los cambios de especificación propuestos y se incorporan en la especificación ECMA actual.

Puede haber algunas discrepancias entre la especificación de características y la implementación completada. Esas diferencias se recogen en las notas de la reunión de diseño de lenguaje (LDM) correspondientes.

Puede obtener más información sobre el proceso de adopción de especificaciones de características en el estándar del lenguaje C#, en el artículo sobre especificaciones.

Problema del campeón: https://github.com/dotnet/csharplang/issues/111

Resumen

Permitir que los descartes (_) se usen como parámetros de lambdas y métodos anónimos. Por ejemplo:

  • lambdas: (_, _) => 0, (int _, int _) => 0
  • métodos anónimos: delegate(int _, int _) { return 0; }

Motivación

No es necesario asignar un nombre a los parámetros sin usar. La intención de los descartes es clara, es decir, no se usan o descartan.

Diseño detallado

Parámetros de método: sección 15.6.2 En la lista de parámetros de un método lambda o anónimo con más de un parámetro denominado _, estos parámetros son parámetros de descarte. Nota: si se denomina un único parámetro _, es un parámetro normal por motivos de compatibilidad con versiones anteriores.

Los parámetros de descarte no introducen ningún nombre en ningún ámbito. Tenga en cuenta que esto implica que no provocan que se oculte ningún nombre mencionado con _ (guion bajo).

Nombres simples (§12.8.4) Si K es cero y el simple_name aparece dentro de un bloque y si el bloque (o un bloque circundante ) cuyo espacio de declaración de variables locales (Declaraciones - §7.3) contiene una variable local, parámetro (con la excepción de los parámetros de descarte) o constante con el nombre I, entonces el simple_name hace referencia a esa variable local, parámetro o constante y se clasifica como una variable o valor.

Ámbitos: §7.7 Con la excepción de los parámetros de descarte, el ámbito de un parámetro declarado en una expresión lambda (§12.19) es el cuerpo de función anónima de esa expresión lambda. Con la excepción de los parámetros de descarte, el ámbito de un parámetro declarado en una expresión de método anónimo (§12.19) es el bloque de esa expresión de método anónimo.