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