Lambda-uttrycksoperatorn (=>) definierar ett lambda-uttryck

Token => stöds i två former: som lambdaoperator och som avgränsare för ett medlemsnamn och medlemsimplementeringen i en uttryckstextdefinition.

Lambda-operator

I lambda-uttryck separerar lambda-operatorn => indataparametrarna på vänster sida från lambdakroppen på höger sida.

I följande exempel används LINQ-funktionen med metodsyntax för att demonstrera användningen av lambda-uttryck:

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

Indataparametrar för ett lambda-uttryck skrivs starkt vid kompileringstillfället. När kompilatorn kan härleda typerna av indataparametrar, som i föregående exempel, kan du utelämna typdeklarationer. Om du behöver ange typen av indataparametrar måste du göra det för varje parameter, som följande exempel visar:

int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product);   // output: 280

I följande exempel visas hur du definierar ett lambda-uttryck utan indataparametrar:

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

Mer information finns i Lambda-uttryck.

Uttryckstextdefinition

En uttryckstextdefinition har följande allmänna syntax:

member => expression;

där expression är ett giltigt uttryck. Returtypen expression måste implicit konverteras till medlemmens returtyp. Om medlemmen:

  • Har en void returtyp eller
  • Är en:
    • Konstruktor
    • Finalizer
    • Egenskaps- eller indexerare set

expressionmåste vara ett instruktionsuttryck. Eftersom uttryckets resultat ignoreras kan returtypen för uttrycket vara vilken typ som helst.

I följande exempel visas en uttryckstextdefinition för en Person.ToString metod:

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

Det är en kortfattad version av följande metoddefinition:

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

Du kan skapa uttryckstextdefinitioner för metoder, operatorer, skrivskyddade egenskaper, konstruktorer, finalizers och egenskaps- och indexerare. Mer information finns i Uttrycksbaserade medlemmar.

Överlagring av operator

Operatorn => kan inte överbelastas.

Språkspecifikation för C#

Mer information om lambda-operatorn finns i avsnittet Anonyma funktionsuttryck i C#-språkspecifikationen.

Se även