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