Operador => (referencia de C#)=> operator (C# reference)

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.The => token is supported in two forms: as the lambda operator and as a separator of a member name and the member implementation in an expression body definition.

Operador lambdaLambda operator

En las expresiones lambda, el operador lambda => separa los parámetros de entrada del lado izquierdo y el cuerpo lambda del lado derecho.In lambda expressions, the lambda operator => separates the input parameters on the left side from the lambda body on the right side.

En el ejemplo siguiente se usa la característica LINQ con sintaxis de método para demostrar el uso de las expresiones lambda:The following example uses the LINQ feature with method syntax to demonstrate the usage of lambda expressions:

string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
  .Where(w => w.StartsWith("a"))
  .Min(w => w.Length);
Console.WriteLine(minimalLength);   // output: 5

int[] numbers = { 1, 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.Input parameters of a lambda expression are strongly typed at compile time. 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.When the compiler can infer the types of input parameters, like in the preceding example, you may omit type declarations. 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:If you need to specify the type of input parameters, you must do that for each parameter, as the following example shows:

int[] numbers = { 1, 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:The following example shows how to define a lambda expression without input parameters:

Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());

Para obtener más información, vea Expresiones lambda.For more information, see Lambda expressions.

Definición de cuerpo de expresionesExpression body definition

Una definición de cuerpo de expresión tiene la siguiente sintaxis general:An expression body definition has the following general syntax:

member => expression;

donde expression es una expresión válida.where expression is a valid expression. El tipo de valor devuelto de expression se debe poder convertir implícitamente al tipo de valor devuelto del miembro.The return type of expression must be implicitly convertible to the member's return type. Si el tipo de valor devuelto del miembro es void, o si el miembro es un constructor, un finalizador o un descriptor de acceso set de propiedad, expression debe ser una expresión de instrucción, que puede ser de cualquier tipo.If the member's return type is void or if the member is a constructor, a finalizer, or a property set accessor, expression must be a statement expression, which can be of any type.

En el ejemplo siguiente se muestra una definición de cuerpo de expresión para un método Person.ToString:The following example shows an expression body definition for a Person.ToString method:

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

Es una versión abreviada de la definición de método siguiente:It's a shorthand version of the following method definition:

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

A partir de C# 6, se admiten definiciones de cuerpos de expresión para métodos, operadores y propiedades de solo lectura.Expression body definitions for methods, operators, and read-only properties are supported beginning with C# 6. A partir de C# 7.0, se admiten definiciones de cuerpos de expresión para constructores, finalizadores y descriptores de acceso de propiedad e indizador.Expression body definitions for constructors, finalizers, and property and indexer accessors are supported beginning with C# 7.0.

Para obtener más información, vea Miembros con forma de expresión.For more information, see Expression-bodied members.

Posibilidad de sobrecarga del operadorOperator overloadability

El operador => no se puede sobrecargar.The => operator cannot be overloaded.

Especificación del lenguaje C#C# language specification

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#.For more information about the lambda operator, see the Anonymous function expressions section of the C# language specification.

Vea tambiénSee also