[.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门html
本节导读:数据库
认识表达式树(Expression Tree),学习使用Lambda建立表达式树,解析表达式树。express
学习表达式在程序设计中的优势:好比构造动态查询、动态构造表达式树完成未知对象属性访问,比反射的性能高出不少。咱们能够说表达式树才是Lambda的精髓,是咱们必需要熟练掌握并灵活运用的。 编程
1.关于表达式树(Expression Tree) 缓存
表达式树以树形数据结构表示代码,其中每个节点都是一种表达式,好比方法调用和 x < y 这样的二元运算等。 数据结构
表达式树,对于刚接触的人来讲,比较难以理解。那么什么是表达式树,通俗点来讲,就是使用一种树形的数据结构来缓存表达式。 性能
2.表达式树能帮咱们作点什么? 学习
上面咱们说了表达式树是一种数据结构,那么为何要把表达式定义成表达式树呢,转成一种数据结构,能帮咱们作点什么?先明确了他能为咱们带来什么,才有动力继续看下去。 spa
说到他的做用,固然是很是有用的,咱们在不少场景下都要使用他,当表达式变为一个表达式树的数据结构时,表达式就变为一个对象,你能够对表达式树中的对象元素(表达式的代码)进行编辑和运算。下面列举几种经常使用的: .net
3. 表达式树的建立
命名空间: System.Linq.Expressions
建立表达式树示例:
Expression<Func<int, int, bool>> expression = (num,num2)=> num < num2;
这个语句包含三个部分:
expression 就是一个类型为Expression<T>的表达式树,能够看出,他并不是是一个可执行代码,而是一种表达式树的数据结构。
4. 表达式树结构的构成
Expression<Func<int, int, bool>> expression = (num,num2)=> num < num2;
经过监视咱们定义好的表达式树,能够看到其构成
下面咱们对几个重要属性说明:
还有一些其余属性Name、CanReduce等,这些不是很经常使用。
5.解析表达式树
咱们了解了表达式树结构的组成,解析表达式变得至关容易了,下面咱们直接经过一个示例来完成对一个表达式树的解析:
//表达式树(Expression) Expression<Func<int, int, bool>> expression = (x, y) => x!=0 && x==y+1; BinaryExpression exr = expression.Body as BinaryExpression; IReadOnlyList<ParameterExpression> param = expression.Parameters as IReadOnlyList<ParameterExpression>; BinaryExpression left = exr.Left as BinaryExpression; BinaryExpression right = exr.Right as BinaryExpression; ExpressionType exrType = exr.NodeType; ParameterExpression leftLeft = left.Left as ParameterExpression; ConstantExpression leftRight = left.Right as ConstantExpression; ExpressionType leftType = left.NodeType; ParameterExpression rightLeft = right.Left as ParameterExpression; BinaryExpression rightRight = right.Right as BinaryExpression; ExpressionType rightType = right.NodeType; ParameterExpression rightRightLeft = rightRight.Left as ParameterExpression; ExpressionType rightRightType = rightRight.NodeType; ConstantExpression rightRightRight = rightRight.Right as ConstantExpression; Console.WriteLine(exr.ToString());
表达式树的解析,里面的元素无非就下面几种:
A.BinaryExpression 包含二元运算符的表达式
B.ParameterExpression命名的参数表达式 ,通常是一组参数集合IReadOnlyList<ParameterExpression>
C.ConstantExpression常量值的表达式
D.ExpressionType节点类型
对于上面示例的表达树结构,我用图例的方式展示以下:
对于上面的结构,咱们能够按上面代码中的对象元素变量与之一一对应以下图:
6 要点:
本节咱们介绍了表达式树在.NET面向对象程序设计中的做用、表达式树的建立与解析,相信小伙伴们对表达式树这种结构比较了解了。
表达式树(Expression Tree)就是一种使用对象的方式来描述表达式。这也正是.NET一切皆是对象的思想体现。
下一节咱们会介绍动态建立一个表达式树结构、会举列说明几种表达式树在.NET程序设计中的应用。
==============================================================================================
<若是对你有帮助,记得点一下推荐哦,若有有不明白或错误之处,请多交流>
<对本系列文章阅读有困难的朋友,请先看《.net 面向对象编程基础》>
<转载声明:技术须要共享精神,欢迎转载本博客中的文章,但请注明版权及URL>
==============================================================================================