Compartir a través de


El operador expresión lambda (=>) define una 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.

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 puede deducir 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 hacerlo 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 tiene la siguiente sintaxis general:

member => expression;

Donde 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 void tipo 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

El => operador no se puede sobrecargar.

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

Consulte también