深入理解 c# 第九章 编译并执行一个表达式树

    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值