Lambda kifejezések (Programming Guide c #), a Microsoft docs

Ebben a cikkben,

Lambda kifejezés - egy névtelen függvényt. mellyel létrehozhat megbízottja típusok és a véleménynyilvánítás fák. Használata lambda kifejezések írhatók helyi funkciók is átadásra érveket vagy vissza a függvény értékei hívásokat. Lambda kifejezések különösen hasznos, ha írásban LINQ lekérdezés kifejezések.

Ahhoz, hogy hozzon létre egy lambda kifejezés, meg kell adnia a bemeneti paramétereket (ha van ilyen) a bal oldalon a lambda operátor =>. és helyezzük a blokk kifejezést vagy üzemeltetők másfelől. Például, egy lambda kifejezés x => x * x beállítja a nevezett paraméter X és visszaadja az x értékét. Akkor egy kifejezést a delegált típusú, amint azt az alábbi példa:

Készítsen egy fa típusú Expression:

=> Operator ugyanolyan elsőbbséget a kiosztás (=), és a társult jobbra (lásd. Szakasz „asszociatív” üzemeltetői a cikket).

Lambda üzemeltetők használt LINQ kéri módszereken alapul paraméterként a standard módszerek lekérdezés szolgáltatók, mint például hol.

Amikor használja a szintaxis módszereken alapul, hogy hívja a módszer Amennyiben az osztályban Enumerable (ahogy az LINQ tárgyak és a LINQ to XML) paraméter az a típusú küldött System.Func. Lambda kifejezés - ez a legkényelmesebb módja annak, hogy hozzon létre egy küldöttet. Amikor hívja ugyanazt a módszert, például az osztályban System.Linq.Queryable (ahogy az LINQ to SQL) típusú paraméter System.Linq.Expressions.Expression. ahol funk - bármilyen funk küldöttek számos bemeneti paraméterek legfeljebb tizenhat. Ismét lambda kifejezések a leggyorsabb módja annak, hogy olyan expressziós fa. Lambda kifejezések lehetővé teszik hívások Hol ugyanúgy néz ki, de valójában egy objektumot hoz létre a lambda kifejezés van egy másik típusú.

Megjegyezzük, hogy a fenti példában aláírás megbízottja van egy implicit bemeneti paraméter int típusú és visszaad egy értéket int típusú. A lambda kifejezés átalakítható a küldött megfelelő típusú, mivel ez is az egyik bemeneti paraméter (x), és visszaadja az érték, amely a fordító tud implicit alakítjuk int típusú. (Következtetés típusok tárgyaljuk részletesebben a következő részekben.) A megbízott által okozott bemeneti paraméter, 5, 25 visszatér az eredmény.

Lambda kifejezések nem használhatók a bal oldalon van, vagy üzemeltetője.

Korlátozások nem vonatkoznak a névtelen módszereket is alkalmazni kell lambda kifejezéseket. További információért lásd. Anonymous módszerek részben.

Lambda kifejezések,

Lambda kifejezés egy expressziós a jobb oldalán az üzemeltető => nevezzük egy expressziós lambda. Lambda-expresszió általánosan használt az építőiparban expressziós fák. Kifejezések lambda kifejezéseket és visszatér az eredménnyel, hogy a következő alapvető formája.

Ha a lambda kifejezés csak egy bemeneti paraméter, nem tudod zárójelben; minden más esetben szükség van rájuk. Két vagy több input paraméterek vesszővel elválasztva és zárójelbe:

Előfordul, hogy a fordító is nehéz, vagy akár lehetetlen meghatározni a bemeneti típusok. Ebben az esetben, a típusokat lehet kifejezetten megadva, amint az a következő példa.

Zero számú bemeneti paraméterek egy üres zárójelek:

Megjegyezzük, hogy a test a lambda-kifejezés állhat eljárás hívás, ahogy az előző példában. Azonban, ha létrehoz egy kifejezést fa, amely ki volt számítva .NET Framework, például az SQL Server, ne használja metódushívások lambda kifejezéseket. Ezek a módszerek nincs értelme keretein kívül a CLR .NET környezetben.

lambda operátor

Lambda operátor hasonlít a kifejezést lambda hogy az üzemben (vagy szolgáltatók) zárójelek:

lambda operátor test lehet bármely gazdasági szereplők száma; de a gyakorlatban ez általában nem hosszabb, mint két vagy három.

Lambda szereplők névtelen módszerekkel nem lehet használni, hogy kifejezést fák.

aszinkron lambdas

A következő kulcsszóval aszinkron és megvárja könnyen létrehozhat lambda kifejezéseket és a szolgáltatók, beleértve az aszinkron feldolgozás. Például a következő Windows Forms tartalmaz például egy eseménykezelő, hogy felhívja az aszinkron módszer ExampleMethodAsync, és vár rá.

Ugyanez eseménykezelő lehet adni az aszinkron lambda kifejezéseket. Hozzáadásához Handler, állítsa a async módosítót előtt a paraméterek listáját lambda kifejezés, amint azt a következő példa.

Lambda szabványos lekérdezési operátorok

Számos standard lekérdezés szolgáltatók bemeneti paraméter, melynek típusa családjába tartozik Func univerzális küldöttek. Ezek küldöttek írja paraméterek meghatározásához használt számú és típusú bemeneti paraméterek, valamint a visszatérési típus a küldött értéket. Funk küldöttek nagyon hasznos, hogy magukba egyéni kifejezések, amelyek alkalmazzák az egyes eleme a beállított bemeneti adatokat. Példaként tekintsük a következő küldött típusát.

Egy példa a delegált hozható létre Func myfunc. ahol int - bemeneti paramétere és bool - visszatérési értéke. A visszatérési érték mindig meghatározott utolsó paraméter típusát. Func Ez határozza meg a küldött két bemeneti paraméterek, int és string. és a visszatérési típus bool. Következő funk megbízottja a hívás értéket ad vissza igaz vagy hamis, ami azt jelzi, hogy a bemeneti paraméter értéke 5.

Továbbá, lambda kifejezéseket lehet használni, ha az argumentum típusú Expression. például a standard lekérdezés üzemeltetők, leírt System.Linq.Queryable. Annak megállapítására, az Expression érv Lambda kifejezések is összeállított egy fa.

Az alábbiakban bemutatjuk a módszert Count. Ez a szabványos lekérdezési operátor.

A fordító lehet következtetni, hogy milyen típusú input bemeneti paraméter; de ez is definiálható egyértelműen. Ez a lambda kiszámítja az említett egész szám (n), amelyek, ha osztva két maradékot kapunk 1.

A következő kódsort sorozatát hozza létre, amely tartalmazza mindazokat az elemeket a tömb a számok. balra 9, mert ez az első szám a sorozatban nem kielégítő:

Ez a példa azt mutatja, hogyan kell meghatározni a számát bemeneti paraméterek által sorozatot. Ez a módszer visszaadja az összes elem a tömb előtti szám a szám, amelynek értéke kisebb, mint a szám az ő helyzetét. Ne tévesszük össze a lambda operátor (=>), a „nagyobb vagy egyenlő” operátor (> =).

Típus következtetni a lambda kifejezések

Írásakor lambda kifejezéseket általában nem szükséges megadni a típusú bemeneti paraméterek, mivel a fordítóprogram kiadhat ilyen típusú testtömeg alapján számított lambda kifejezés paraméter megbízottja típusát és egyéb tényezők, ahogy az a C # nyelv specifikációt. A legtöbb szabványos lekérdezési szereplők az első bemeneti értéket típusú elemek az eredeti sorrendben. Ezért, amikor kér IEnumerable bemeneti változó tekintik az objektum Ügyfél. ami azt jelenti, hogy van, hogy a módszerek és tulajdonságok.

Általános szabályok a lambda kifejezéseket az alábbiak szerint történik:

lambda expressziós kell tartalmaznia az azonos paraméterek száma, mint a küldött típusú;

Minden bemeneti paraméter a lambda expressziós hogy implicit módon átalakítható a megfelelő paramétert a küldött;

a visszatérési érték egy lambda expressziós (ha van ilyen) kell lennie, implicit módon átalakítható a visszatérési típus a küldött.

Megjegyzés: lambda kifejezések nem a saját típusát, eredetileg nincs fogalma a „lambda” a közös típusú rendszer. Néha azonban célszerű működni a „típus”, mint alkalmazott egy lambda kifejezés. Ebben az esetben, a típus típusára utal a küldött típusú vagy Expression. amely átalakul egy lambda kifejezés.

A köre egy változót a lambda kifejezések

Lambda kifejezések utalhat külső változók (lásd. Anonymous eljárások részt), amelyek a hatálya alá a módszerrel, amelyben a lambda van definiált függvény, vagy egy régió olyan típusú, amely tartalmaz egy lambda kifejezés. Származtatott változók ilyen módon tárolják felhasználásra lambda kifejezéseket, akkor is, ha egyébként hatályán kívül estek, és elpusztította a szemétgyűjtő. Külső változót kell feltétlenül előtt hozzá lehet használni lambda kifejezéseket. Az alábbi példa bemutatja ezeket a szabályokat.

A következő szabályok vonatkoznak a változó alkalmazási körét a lambda kifejezéseket.

Elfogott változó nem lehet megsemmisíteni a szemétgyűjtő, amíg a résztvevő, amely hivatkozik, ne menjen be az állapotot kell megsemmisíteni szemétgyűjtés.

Változók belépett a lambda kifejezés nem láthatók a külső módszer.

A lambda kifejezés nem lehet közvetlenül rögzíteni ref vagy ki paraméterek a módszert, amelyben találhatók.

A return utasítás egy lambda kifejezés nem okoz a visszatérési érték a külső módszer.

Lambda kifejezés nem tartalmaz goto utasítást. Egy kis szünetet, vagy továbbra nyilatkozat belül Lambda funkció, ha a céltárgy ki az átmeneti blokk. Ha a célpont a blokkon belül, akkor a jelenlévő átmeneti üzemeltető kívül lambda funkció szintén egy hibát.

C # Language Specification

További információért lásd. C # nyelv specifikációt. Leírás nyelv a végleges információforrás a szintaxis és használata a C # nyelvet.

Fontos fejezet a könyv

Kapcsolódó cikkek