Lambda表示式樹的簡單理解
阿新 • • 發佈:2018-12-09
Lambda表示式樹
Lambda表示式樹允許我們像處理資料(比如讀取,修改)一樣來處理Lambda表示式。我以一個例子簡單說明:
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 );
效果圖如下:
Lambda表示式和Lambda表示式樹要點
Lambda表示式的引數型別可以忽略,因為可以根據使用的上下文進行推斷。 Lambda表示式的主體(body)可以是表示式,也可以是語句塊。 Lambda表示式傳入的實參將參與型別推斷,以及方法過載辨析。 Lambda表示式和表示式體可以被轉換為表示式樹。 表示式樹允許lambda表示式能夠代表資料結構替代表示為執行程式碼。