Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El operador expresión lambda (
El => token se admite en dos formas: como operador lambda y como separador de un nombre de miembro y la implementación de miembro en una definición de cuerpo de expresión.
La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.
La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.
Sugerencia
Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.
Operador lambda
En las expresiones lambda, el operador => lambda separa los parámetros de entrada del lado izquierdo del cuerpo lambda del lado derecho.
En el ejemplo siguiente se usa la característica LINQ con sintaxis de método para demostrar el uso de expresiones lambda:
string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
.Where(w => w.StartsWith("a"))
.Min(w => w.Length);
Console.WriteLine(minimalLength); // output: 5
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product); // output: 280
Los parámetros de entrada de una expresión lambda se escriben fuertemente en tiempo de compilación. Cuando el compilador deduce los tipos de parámetros de entrada, como en el ejemplo anterior, puede omitir declaraciones de tipo. Si necesita especificar el tipo de parámetros de entrada, debe especificar el tipo para cada parámetro, como se muestra en el ejemplo siguiente:
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product); // output: 280
En el ejemplo siguiente se muestra cómo definir una expresión lambda sin parámetros de entrada:
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());
Para obtener más información, vea Expresiones lambda.
Definición del cuerpo de expresión
Una definición de cuerpo de expresión usa la siguiente sintaxis general:
member => expression;
expression es una expresión válida. El tipo de valor devuelto de expression debe convertirse implícitamente en el tipo de valor devuelto del miembro. Si el miembro:
- Tiene un
voidtipo de valor devuelto o - Es un:
- Constructor
- Finalizador
- Descriptor de acceso de propiedad o indexador
set
expression debe ser una expresión de instrucción. Dado que el resultado de la expresión se descarta, el tipo de valor devuelto de esa expresión puede ser cualquier tipo.
En el ejemplo siguiente se muestra una definición de cuerpo de expresión para un Person.ToString método :
public override string ToString() => $"{fname} {lname}".Trim();
Es una versión abreviada de la siguiente definición de método:
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
Puede crear definiciones de cuerpo de expresión para métodos, operadores, propiedades de solo lectura, constructores, finalizadores y descriptores de acceso de propiedad e indexador. Para obtener más información, vea Miembros con forma de expresión.
Posibilidad de sobrecarga del operador
No se puede sobrecargar el => operador.
Especificación del lenguaje C#
Para obtener más información sobre el operador lambda, vea la sección Expresiones de función anónimas de la especificación del lenguaje C#.