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.

C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.

Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.

Tips/Råd

Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.

Lambdaoperatör

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

Inmatningsparametrar för ett lambda-uttryck har stark typning vid kompileringstillfället. När kompilatorn härleder typerna av indataparametrar, som i föregående exempel, kan du utelämna typdeklarationer. Om du behöver ange typ av indataparametrar måste du ange typen 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.

Definition av uttrycksbaserad kropp

En uttryckstextdefinition använder följande allmänna syntax:

member => expression;

För en medlem som returnerar ett värde måste uttryckets resultat implicit konverteras till medlemmens returtyp. För en void medlem, konstruktor, finalizer eller set, init, addeller remove accessor måste brödtexten vara ett uttryck för instruktionen. Ett instruktionsuttryck kan vara en tilldelning, metodanrop, objektskapande, inkrements- eller minskningsåtgärd eller await uttryck. Dess resultat, om det finns något, ignoreras.

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 använda uttryckstextdefinitioner för följande medlemmar:

  • Metoder och lokala funktioner: En medlem som returnerar ett värde har formuläret T M() => expression;. En void medlem har formuläret void M() => statementExpression;. Mer information finns i Metoder och lokala funktioner.
  • Operatorer: En operator har formuläret public static T operator +(T left, T right) => expression;. För mer information, se Operatoröverbelastning.
  • Egenskaper och indexerare: En skrivskyddad egenskap eller indexerare har formuläret T P => expression; eller T this[int i] => expression;. Du kan också använda uttryckskroppar för enskilda användare. En get accessor har formuläret get => expression;. En set eller init -accessor har formuläret set => statementExpression; eller init => statementExpression;. Mer information finns i Egenskaper och indexerare.
  • Konstruktorer och slutförare: Dessa medlemmar har formuläret C() => statementExpression; eller ~C() => statementExpression;. Mer information finns i Konstruktorer och finalatorer.
  • Händelseåtkomst: En add eller remove -accessor har formuläret add => statementExpression; eller remove => statementExpression;. Mer information finns i Händelser.

Överlagring av operator

Du kan inte överbelasta operatorn => .

Språkspecifikation för C#

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

Se även