Expression tree 是一個樹狀結構的物件, 這個樹上的每一個節點都是一個運算節點(Expression Node), Expression Node 都是 Expression 類別, 常見的 Expression Node 有, ConstantExpression, ParameterExpression, MethodCallExpression, MemberExpression, LambdaExpression, BinaryExprfession, 可以利用將 lambda 運算式賦值給 Expression<TDelegate> 類型, 來建立 Expression tree, Expression<TDelegate> 經過 Compile 方法又會得到 TDelegate 委託類
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
Expression<Func<int, int>> squareExp = num => num * num;
Func<int, int> square = squareExp.Compile();
Console.WriteLine(square(3));
也可以使用 Expression 類別的靜態方法來建立, 如果要建立 ConstantExpression 就使用 Constant 方法建立, ParameterExpression 就使用 Parameter 方法
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
BinaryExpression numSquare = Expression.Multiply(numParam, numParam);
Expression<Func<int, int>> squareExp = Expression.Lambda<Func<int,int>>(numSquare, numParam);
Func<int,int> square = squareExp.Compile();
Console.WriteLine(square(3));