数据结构论坛

注册

 

发新话题 回复该主题

Expression表达式目录树 [复制链接]

1#

一、表达式目录树概况

Expression我们称为是表达式树(命名空间:System.Linq.Expressions),是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的,lambda可以是匿名方法,当然也可以使用Expression来动态的创建!

表达式目录树的简单创建方法,如图:

Expression表达式目录树的创建

从图中我们可以看到第一种方式与第二种方式得到的结果式一致的,只不过第一种是通过lambda匿名方法来构建,第二种是通过动态的Expression来构建。另外下图中的原理也是一样的

三种方式比较

下面举例说明以下Expression.Block

从上图中我们可以看到,表达式目录树可以执行简单的加减乘除方法,然而从中我们可以发现,在使用表达式目录树默认变量时,传入的参数可以为null,然而在我们创建的添加方法中不能使用null只能用默认值0表示,其实是因为在表达式目录树中获取传入参数的类型是未指定的。

当然我们指定变量为整型时,我们传入值为字符串类型时,编译器并不会给出错误提示,但在编译时会报错。这是因为表达式目录树时动态编译的。

Expression的一些变量

二、表达式目录树与委托

Expression一般都是都是配合委托一起来使用的,比如和委托Action(没有返回值),Func(至少有一个返回参数,且最后一个值为返回参数),Action,Func既可以直接传入一个与之匹配的实体方法,又可以传入lambda表达式这种匿名类。Expression,Action,Func关键词是在.net3.5之后出现的。ExpressionFuncT是可以转成Func的(通过

分享 转发
TOP
发新话题 回复该主题