Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
De operator Lambda-expressie (
Het => token wordt in twee vormen ondersteund: als de lambda-operator en als scheidingsteken van een lidnaam en de implementatie van het lid in een definitie van de expressietekst.
De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.
De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.
Aanbeveling
Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.
Lambda-operator
In lambda-expressies scheidt de lambda-operator => de invoerparameters aan de linkerkant van de lambda-body aan de rechterkant.
In het volgende voorbeeld wordt de LINQ-functie met methodesyntaxis gebruikt om het gebruik van lambda-expressies te demonstreren:
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
Invoerparameters van een lambda-expressie worden sterk getypt tijdens het compileren. Wanneer de compiler de typen invoerparameters afgeeft, zoals in het vorige voorbeeld, kunt u typedeclaraties weglaten. Als u het type invoerparameters moet opgeven, moet u het type voor elke parameter opgeven, zoals in het volgende voorbeeld wordt weergegeven:
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product); // output: 280
In het volgende voorbeeld ziet u hoe u een lambda-expressie zonder invoerparameters definieert:
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());
Zie Lambda-expressies voor meer informatie.
Hoofdtekstdefinitie van expressie
Een definitie van de hoofdtekst van een expressie maakt gebruik van de volgende algemene syntaxis:
member => expression;
Voor een lid dat een waarde retourneert, moet het resultaat van de expressie impliciet worden geconverteerd naar het retourtype van het lid. Voor een void lid, constructor, finalizer of set, initaddof remove accessor moet de hoofdtekst een instructieexpressie zijn. Een instructieexpressie kan een toewijzing, methodeaanroep, het maken van objecten, incrementele of aflopende bewerking of await expressie zijn. Het resultaat, indien aanwezig, wordt verwijderd.
In het volgende voorbeeld ziet u een definitie van de hoofdtekst van een expressie voor een Person.ToString methode:
public override string ToString() => $"{fname} {lname}".Trim();
Het is een verkorte versie van de volgende methodedefinitie:
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
U kunt expressietekstdefinities gebruiken voor de volgende leden:
-
Methoden en lokale functies: Een lid dat een waarde retourneert, heeft het formulier
T M() => expression;. Eenvoidlid heeft het formuliervoid M() => statementExpression;. Zie Methoden en lokale functies voor meer informatie. -
Operators: Een operator heeft het formulier
public static T operator +(T left, T right) => expression;. Zie Overbelasting van operatoren voor meer informatie. -
Eigenschappen en indexeerfuncties: Een alleen-lezen eigenschap of indexeerfunctie heeft het formulier
T P => expression;ofT this[int i] => expression;. U kunt ook expressieteksten gebruiken voor afzonderlijke accessors. Eengetaccessor heeft het formulierget => expression;. Eensetofinitaccessor heeft het formulierset => statementExpression;ofinit => statementExpression;. Zie Eigenschappen en indexeerfuncties voor meer informatie. -
Constructors en finalizers: Deze leden hebben het formulier
C() => statementExpression;of~C() => statementExpression;. Zie Constructors en Finalizers voor meer informatie. -
Gebeurtenistoegangsors: Een
addofremoveaccessor heeft het formulieradd => statementExpression;ofremove => statementExpression;. Zie Gebeurtenissenvoor meer informatie.
Overbelasting van operatoren
U kunt de => operator niet overbelasten.
C#-taalspecificatie
Zie de sectie Anonieme functie-expressies van de C#-taalspecificatie voor meer informatie over de lambda-operator.