上一篇介绍了表达式树的一些基本用法,这里介绍下包含更复杂逻辑的表达式树。

1.判断逻辑的表达式树

LabelTarget labelBreak = Expression.Label();
ParameterExpression loopIndex = Expression.Parameter(typeof(int), "index");BlockExpression block = Expression.Block(new[] { loopIndex },// 初始化loopIndex =1Expression.Assign(loopIndex, Expression.Constant(1)),Expression.Loop(Expression.IfThenElse(// if 的判断逻辑Expression.LessThanOrEqual(loopIndex, Expression.Constant(10)),// 判断逻辑通过的代码Expression.Block(Expression.Call(null,typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }),Expression.Constant("Hello")),Expression.PostIncrementAssign(loopIndex)),// 判断不通过的代码Expression.Break(labelBreak)), labelBreak));// 将我们上面的代码块表达式
Expression<Action> lambdaExpression = Expression.Lambda<Action>(block);
lambdaExpression.Compile().Invoke();

这个表达式阅读起来有点费劲,不过仔细读一下还是比较好理解的。

2.类型判断的表达式树

TypeBinaryExpression typeBinaryExpression =Expression.TypeIs(//Expression.Constant(3),Expression.Constant("Hello"),typeof(int));Console.WriteLine(typeBinaryExpression.ToString());
BlockExpression block = Expression.Block(typeBinaryExpression);Expression<Func<bool>> e = Expression.Lambda<Func<bool>>(block);
Console.WriteLine(e.Compile().DynamicInvoke());

这个表达式树是构建了一个类型判断的表达式,我们首先打印出表达式,然后我们调用表达式。

Expression Tree Introduction - 02相关推荐

  1. Expression Tree 上手指南 (二)

    上回我们说到Expression Tree是一种表示编程语言中"表达式"概念的树状数据结构,并且学习了从Lambda表达式自动生成表达式树的C#语法.那么它到底有什么用呢?其实上一 ...

  2. 反射,Expression Tree,IL Emit 属性操作对比

    .net的反射(Reflection) 是.Net中获取运行时类型信息的一种方法,通过反射编码的方式可以获得 程序集,模块,类型,元数据等信息. 反射的优点在于微软提供的API调用简单,使用方便: 表 ...

  3. [转]打造自己的LINQ Provider(上):Expression Tree揭秘

    概述 在.NET Framework 3.5中提供了LINQ 支持后,LINQ就以其强大而优雅的编程方式赢得了开发人员的喜爱,而各种LINQ Provider更是满天飞,如LINQ to NHiber ...

  4. 快速上手Expression Tree(一):做一做装配脑袋的Expression Tree 习题

    装配脑袋的习题在这里:Expression Tree上手指南 (一) 不了解Expression Tree的同学可以去看下,很好,很强大. 1: -a 2: a + b * 2 我把这些问题都弄成了方 ...

  5. 三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate

    在<上篇>中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit.本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression ...

  6. 一起谈.NET技术,关于Expression Tree和IL Emit的所谓的quot;性能差别quot;

    昨天写了<三种属性操作性能比较>,有个网友写信问我一个问题:从性能上看,Expression Tree和IL Emit孰优孰劣?虽然我在回信中作了简单的回答,但不知道这个网友是否懂我的意思 ...

  7. Leetcode 1628. Design an Expression Tree With Evaluate Function [Python]

    System Design.使用stack存入数字,当遇到操作符号时,弹出stack中的数字.先出的为right,后出为left.完成操作后再压入stack.操作过程写在tree的evaluate函数 ...

  8. NET(C#):使用Expression Tree构建带有参数、本地变量和返回值的Lambda

    .NET(C#):使用Expression Tree构建带有参数.本地变量和返回值的Lambda 对于参数,需要使用Expression.Parameter创建ParameterExpression对 ...

  9. 表达式树(EXPRESSION TREE)

    表达式树是不可执行的代码,它只是用于表示一种树状的数据结构,树上的每一个节点都表示为某种表达式类型,大概有25种表达式类型,它们都派生自Expression类.创建表达式树具体有两个优势: 1.对表达 ...

最新文章

  1. 【 Verilog HDL 】Verilog 迭代连接运算符
  2. 全卷积神经网路【U-net项目实战】Unet++
  3. map的key可以试一个数组吗?_【自考】数据结构第三章,数组,期末不挂科指南,第5篇...
  4. Sense编辑器(Sense Editor)
  5. React开发(235):document.body.clientHeight
  6. codeforces 282A-C语言解题报告
  7. fullcalendar next 不变化_让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第3篇...
  8. conda install 等价与pip install -e .
  9. 快速理解HTTP协议
  10. 利用java生成uuid
  11. 中国草鱼养殖产业发展现状分析,生态养殖是未来发展趋势「图」
  12. C语言虚词怎么在程序里表示,文言虚词用法推断
  13. 计算机更改为英语,win7如何修改语言 电脑语言改成英文的方法
  14. Java 处理资源的try语句 (try-with-resources, TWR)
  15. 从0到1构建一个电商平台 – 开发篇(转)
  16. excel查重模型,老板不要再烦我
  17. 引用 CPU : 什么是超频,怎么给CPU超频?
  18. 有理数加法 (15 分)
  19. 财路网每日原创推送:轻信微信上的投资专家,男子亏损四十多万!
  20. 【转】数学专业参考书整理推荐V3.0版

热门文章

  1. (四)Hadoop分布式文件系统Hdfs
  2. 简单的实现微信领取红包界面,按钮旋转动画效果。
  3. python生成和读取二维码
  4. 强势解锁 GitHub 新姿势,一键实现在线编写代码!
  5. SPSS软件实操——ARIMA时间序列预测模型
  6. 2013-BIT程序设计 14.古罗马的加法
  7. 图像处理基础学习笔记——OpenCV已学API汇总
  8. matlabff2函数_罚函数法MATLAB程序
  9. 什么是集总参数,什么是分布参数(硬件每日一题)
  10. 我的完美新娘 - Part 4