Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lambda-uttrycksoperatorn (
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;
expression är ett giltigt uttryck. Returtypen expression måste implicit konverteras till medlemmens returtyp. Om medlemmen:
- Har en
voidreturtyp, eller - Är en:
- Konstruktor
- Finaliserare
- Egenskaps- eller indexerare
setaccessor
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, finalizer och egenskaps- och indexåtkomstmetoder. Mer information finns i Uttrycksbaserade medlemmar.
Ö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.