El operador de expresión lambda (=>) define una expresión lambda

El token => se admite de dos formas: como el operador lambda y como un separador de un nombre de miembro y la implementación del miembro en una definición de cuerpo de expresión.

Operador{1}{2}lambda

En las expresiones lambda, el operador=>{4}lambda {5} separa los parámetros de entrada del lado izquierdo y el 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 las 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 están fuertemente tipados en tiempo de compilación. Cuando el compilador puede deducir los tipos de los parámetros de entrada, como en el ejemplo anterior, se pueden omitir las declaraciones de tipos. Si tiene que especificar el tipo de los parámetros de entrada, debe hacerlo para cada uno de ellos, 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 de cuerpo de expresiones

Una definición de cuerpo de expresión tiene la siguiente sintaxis general:

member => expression;

donde expression es una expresión válida. El tipo de valor devuelto de expression se debe poder convertir implícitamente al tipo de valor devuelto del miembro. Si el miembro:

  • Tiene un tipo de valor devuelto void o
  • Es un:
    • Constructor
    • Finalizador
    • Descriptor de acceso set de propiedad o indizador

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 cualquiera.

En el ejemplo siguiente se muestra una definición de cuerpo de expresión para un método Person.ToString:

public override string ToString() => $"{fname} {lname}".Trim();

Es una versión abreviada de la definición de método siguiente:

public override string ToString()
{
   return $"{fname} {lname}".Trim();
}

Puede crear definiciones de cuerpo de expresiones para métodos, operadores, propiedades de solo lectura, constructores, finalizadores y descriptores de acceso de propiedades e indizadores. Para obtener más información, vea Miembros con forma de expresión.

Posibilidad de sobrecarga del operador

El operador => no se puede sobrecargar.

Especificación del lenguaje C#

Para más información sobre el operador lambda, vea la sección Expresiones de función anónima de la Especificación del lenguaje C#.

Consulte también