一、表达式目录树概况
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的(通过