C# Lambda表達(dá)式樹(shù)淺談
C#新語(yǔ)言特性有很多值得學(xué)習(xí)的地方,這里我們主要介紹C# Lambda表達(dá)式樹(shù),包括介紹C# Lambda表達(dá)式樹(shù)要點(diǎn)等方面。
C# Lambda表達(dá)式樹(shù)
C# Lambda表達(dá)式樹(shù)允許我們像處理數(shù)據(jù)(比如讀取,修改)一樣來(lái)處理Lambda表達(dá)式。我以一個(gè)例子簡(jiǎn)單說(shuō)明:
- Expression<Func<int, bool>> filter = n => (n * 3) < 5;
- BinaryExpression lt = (BinaryExpression)filter.Body;
- BinaryExpression mult = (BinaryExpression)lt.Left;
- ParameterExpression en = (ParameterExpression)mult.Left;
- ConstantExpression three = (ConstantExpression)mult.Right;
- ConstantExpression five = (ConstantExpression)lt.Right;
- var One = filter.Compile();
- Console.WriteLine("Result: {0},{1}", One(5), One(1));
- Console.WriteLine("({0} ({1} {2} {3}) {4})", lt.NodeType,mult.
NodeType, en.Name, three.Value, five.Value);
效果圖如下:
C# Lambda表達(dá)式樹(shù)要點(diǎn)
1. Lambda表達(dá)式的參數(shù)類(lèi)型可以忽略,因?yàn)榭梢愿鶕?jù)使用的上下文進(jìn)行推斷。
2. Lambda表達(dá)式的主體(body)可以是表達(dá)式,也可以是語(yǔ)句塊。
3. Lambda表達(dá)式傳入的實(shí)參將參與類(lèi)型推斷,以及方法重載辨析。
4. Lambda表達(dá)式和表達(dá)式體可以被轉(zhuǎn)換為表達(dá)式樹(shù)。
5. 表達(dá)式樹(shù)允許lambda表達(dá)式能夠代表數(shù)據(jù)結(jié)構(gòu)替代表示為執(zhí)行代碼。
【編輯推薦】