位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# Lambda表達(dá)式用作委托和表達(dá)式樹(shù)

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

可采用兩種方式來(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)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部