class CompiledExpressionTree
{
static void Main() //将表达式树编译成委托
{
Expression firstArg = Expression.Constant(2);
Expression secondArg = Expression.Constant(3);
Expression add = Expression.Add(firstArg, secondArg);
Func<int> compiled = Expression.Lambda<Func<int>>(add).Compile();
Console.WriteLine(compiled());
}
}
LambdaExpression是从Expression派生的类型之一。 泛型类Expression<TDelegate>
又是从LambdaExpression派生。
Expression和Expression<TDelegate>类的区别,泛型类以金泰类型的方式标识了
它是什么种类的表达式,也就是说,它确定了返回类型和参数。
用TDelegate类型参数表示,必须是一个委托类型。 假设我们的简单加法表达式就是
一个不获取任何参数,并返回整数的委托。与之匹配的签名就是Func<int>,所以
可以使用一个Expression<Func<int>>,以静态类型的方式表示该表达式。
LambdaExpression有一个Compile方法能创建恰当类型的委托。
Expression<TDelegate>有一个同名方法,但它静态类型话后返回TDelegate类型的
委托。
在程序中创建逻辑块,将其表示成普通对象, 然后要求框架将所有的东西都编译成可以
执行的"真实"的代码。
输出
5