Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Lambda kifejezés (
A => token két formában támogatott: lambda operátorként és egy tag név valamint tag megvalósítás elválasztójaként egy kifejezés törzsdefiníciójában.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
Lambda operátor
A lambda kifejezésekben a lambda operátor => elkülöníti a bal oldalon lévő bemeneti paramétereket a jobb oldalon lévő lambda törzstől.
Az alábbi példa a LINQ funkciót használja metódusszintaxissal a lambda kifejezések használatának szemléltetésére:
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
A lambda kifejezés bemeneti paraméterei a fordításkor erősen be vannak adva. Amikor a fordító a bemeneti paraméterek típusaira következtet, például az előző példában, kihagyhatja a típusdeklarációkat. Ha meg kell adnia a bemeneti paraméterek típusát, meg kell adnia az egyes paraméterek típusát, ahogy az alábbi példa mutatja:
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product); // output: 280
Az alábbi példa bemutatja, hogyan definiálhat lambdakifejezést bemeneti paraméterek nélkül:
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());
További információ: Lambda-kifejezések.
Kifejezéstörzs definíciója
A kifejezéstörzs definíciója a következő általános szintaxist használja:
member => expression;
Egy értéket visszaadó tag esetében a kifejezés eredményének implicit módon konvertálhatónak kell lennie a tag visszatérési típusára. Tag void , konstruktor, finalizer vagy set, init, add, vagy remove tartozék esetén a törzsnek utasításkifejezésnek kell lennie. Az utasításkifejezés lehet hozzárendelés, metódushívás, objektumlétrehozás, növekményes vagy decrement művelet vagy await kifejezés. Az eredmény (ha van ilyen) elvetésre kerül.
Az alábbi példa egy metódus kifejezéstörzs-definícióját Person.ToString mutatja be:
public override string ToString() => $"{fname} {lname}".Trim();
Ez a következő metódusdefiníció rövidített verziója:
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
A kifejezés törzsdefinícióit a következő tagokhoz használhatja:
-
Metódusok és helyi függvények: Az értéket visszaadó tag űrlapja
T M() => expression;. Egyvoidtag rendelkezik az űrlappalvoid M() => statementExpression;. További információ: Metódusok és helyi függvények. -
Operátorok: Egy operátor rendelkezik az űrlappal
public static T operator +(T left, T right) => expression;. További információ: Operátorok túlterhelése. -
Tulajdonságok és indexelők: Egy írásvédett tulajdonság vagy indexelő űrlapot
T P => expression;vagyT this[int i] => expression;. A kifejezéstörzseket az egyes tartozékokhoz is használhatja. Agettartozék az űrlapotget => expression;. Asetvagyinittartozék az űrlapotset => statementExpression;vagyinit => statementExpression;. További információ: Tulajdonságok és indexelők. -
Konstruktorok és döntősök: Ezek a tagok rendelkeznek az űrlappal
C() => statementExpression;vagy~C() => statementExpression;a . További információ: Konstruktorok és döntősök. -
Eseménykiegészítők: Egy
addvagyremovetöbb tartozék az űrlapotadd => statementExpression;vagyremove => statementExpression;a . További információ: Események.
Operátorok túlterhelése
Nem terhelheti túl az operátort => .
C# nyelvspecifikáció
A lambda operátorral kapcsolatos további információkért lásd a C# nyelv specifikációjánakNévtelen függvénykifejezések szakaszát.