C# Lambda表達(dá)式用作委托和表達(dá)式樹(shù)
可采用兩種方式來(lái)解釋Lambda表達(dá)式。
第一,如本章所述,Lambda表達(dá)式是一個(gè)委托。即可以把Lambda表達(dá)式賦予一個(gè)委托類(lèi)型的變量,如前面的示例所示。
一般可以把擁有至多8個(gè)參數(shù)的Lambda表達(dá)式表示為如下泛型類(lèi)型,它們都在System名稱(chēng)名空間中定義:
?Action, 表示的Lambda表達(dá)式不帶參數(shù),返回類(lèi)型是void
?Actiono, 表示的Lambda表達(dá)式有至多8個(gè)參數(shù),返回類(lèi)型是void
?Func<>, 表示的Lambda表達(dá)式有至多8個(gè)參數(shù),返回類(lèi)型不是void
Actiono最多有8個(gè)泛型類(lèi)型的參數(shù),分別用于Lambda表達(dá)式的8個(gè)參數(shù),F(xiàn)unco最多有9個(gè)泛型類(lèi)型的參數(shù),分別用于Lambda表達(dá)式的8個(gè)參數(shù)和返回類(lèi)型。在Func<>中,返回類(lèi)型始終在列表的最后。
例如,下面的Lambda表達(dá)式:
(int paramA/ int paramB) => paramA + paramB
可以表示為Func<int,int,int>類(lèi)型的委托,因?yàn)樗袃蓚€(gè)int參數(shù),返回類(lèi)型是int。注意,在很多情況下,可以使用這些泛型委托類(lèi)型,而不必定義自己的泛型委托類(lèi)型。例如,可以使用它們代替前面的示例中定義的 TwolntegerOperationDelegate 委托。
第二,可以把Lambda表達(dá)式解釋為表達(dá)式樹(shù)。表達(dá)式樹(shù)是Lambda表達(dá)式的抽象表示,因此不能直接執(zhí)行??墒褂帽磉_(dá)式樹(shù)以編程方式來(lái)分析Lambda表達(dá)式,執(zhí)行操作,以響應(yīng)Lambda表達(dá)式。
顯然這是一個(gè)復(fù)雜主題,但表達(dá)式樹(shù)對(duì)后面介紹的LINQ功能至關(guān)重要。下面列舉一個(gè)具體例子。UNQ 框架包含一個(gè)泛型類(lèi)Expression< >,可用于封裝Lambda表達(dá)式。使用這個(gè)類(lèi)的一種方式是提取用C#編寫(xiě)的Lambda表達(dá)式,把它轉(zhuǎn)換為相應(yīng)的SQL腳本,以便在數(shù)據(jù)庫(kù)中直接執(zhí)行。
目前并不需要了解太多內(nèi)容,在本書(shū)后面遇到這個(gè)功能時(shí),能更好地理解其過(guò)程,因?yàn)楝F(xiàn)在我們己經(jīng)理解了C#語(yǔ)言提供的一些重要概念。
繼續(xù)查找其他問(wèn)題的答案?
- 開(kāi)始學(xué)習(xí)
海報(bào)設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)字體設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)室內(nèi)設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)影視動(dòng)畫(huà)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)UI設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)
點(diǎn)擊加載更多評(píng)論>>