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

C# Lambda表達式用作委托和表達式樹

提問人:劉團圓發(fā)布時間:2020-12-08

可采用兩種方式來解釋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#語言提供的一些重要概念。

繼續(xù)查找其他問題的答案?

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