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
expression
må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.