Expression Tree Introduction - 02
上一篇介绍了表达式树的一些基本用法,这里介绍下包含更复杂逻辑的表达式树。
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相关推荐
- Expression Tree 上手指南 (二)
上回我们说到Expression Tree是一种表示编程语言中"表达式"概念的树状数据结构,并且学习了从Lambda表达式自动生成表达式树的C#语法.那么它到底有什么用呢?其实上一 ...
- 反射,Expression Tree,IL Emit 属性操作对比
.net的反射(Reflection) 是.Net中获取运行时类型信息的一种方法,通过反射编码的方式可以获得 程序集,模块,类型,元数据等信息. 反射的优点在于微软提供的API调用简单,使用方便: 表 ...
- [转]打造自己的LINQ Provider(上):Expression Tree揭秘
概述 在.NET Framework 3.5中提供了LINQ 支持后,LINQ就以其强大而优雅的编程方式赢得了开发人员的喜爱,而各种LINQ Provider更是满天飞,如LINQ to NHiber ...
- 快速上手Expression Tree(一):做一做装配脑袋的Expression Tree 习题
装配脑袋的习题在这里:Expression Tree上手指南 (一) 不了解Expression Tree的同学可以去看下,很好,很强大. 1: -a 2: a + b * 2 我把这些问题都弄成了方 ...
- 三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate
在<上篇>中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit.本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression ...
- 一起谈.NET技术,关于Expression Tree和IL Emit的所谓的quot;性能差别quot;
昨天写了<三种属性操作性能比较>,有个网友写信问我一个问题:从性能上看,Expression Tree和IL Emit孰优孰劣?虽然我在回信中作了简单的回答,但不知道这个网友是否懂我的意思 ...
- Leetcode 1628. Design an Expression Tree With Evaluate Function [Python]
System Design.使用stack存入数字,当遇到操作符号时,弹出stack中的数字.先出的为right,后出为left.完成操作后再压入stack.操作过程写在tree的evaluate函数 ...
- NET(C#):使用Expression Tree构建带有参数、本地变量和返回值的Lambda
.NET(C#):使用Expression Tree构建带有参数.本地变量和返回值的Lambda 对于参数,需要使用Expression.Parameter创建ParameterExpression对 ...
- 表达式树(EXPRESSION TREE)
表达式树是不可执行的代码,它只是用于表示一种树状的数据结构,树上的每一个节点都表示为某种表达式类型,大概有25种表达式类型,它们都派生自Expression类.创建表达式树具体有两个优势: 1.对表达 ...
最新文章
- 【 Verilog HDL 】Verilog 迭代连接运算符
- 全卷积神经网路【U-net项目实战】Unet++
- map的key可以试一个数组吗?_【自考】数据结构第三章,数组,期末不挂科指南,第5篇...
- Sense编辑器(Sense Editor)
- React开发(235):document.body.clientHeight
- codeforces 282A-C语言解题报告
- fullcalendar next 不变化_让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第3篇...
- conda install 等价与pip install -e .
- 快速理解HTTP协议
- 利用java生成uuid
- 中国草鱼养殖产业发展现状分析,生态养殖是未来发展趋势「图」
- C语言虚词怎么在程序里表示,文言虚词用法推断
- 计算机更改为英语,win7如何修改语言 电脑语言改成英文的方法
- Java 处理资源的try语句 (try-with-resources, TWR)
- 从0到1构建一个电商平台 – 开发篇(转)
- excel查重模型,老板不要再烦我
- 引用 CPU : 什么是超频,怎么给CPU超频?
- 有理数加法 (15 分)
- 财路网每日原创推送:轻信微信上的投资专家,男子亏损四十多万!
- 【转】数学专业参考书整理推荐V3.0版