什么是表达式目录树
-
Expression:提供一种基类,表示表达式树节点的类派生自该基类。
//首先 来看一下一个funk 传入两个int类型的值 返回计算结果 Func<int, int, int> func = (y, x) => x * x + y; //通过以上代码能看出来 定义的这个委托所做的事情就是吧传入的两个值进行简单的相加 返回两值之和 //如果还是理解不了 由在下来给这个fun拆分一哈 //总所周知委托的意思就把方法以参数传入 (y, x) => y + x; 这一句就是一个lambda表达式 //由一个方法简化而来 //所以也等值于以下 Func<int, int, int> func1 = new Func<int, int, int>( delegate (int x, int y) { return x * x + y; }); //所以呢 为了方便 在编译器中 可以把new Func<int, int, int> 以及关键字Ddelegate去掉 //加上gosto:=>符号 继续缩写 就成了以上方法 Func<int, int, int> func2 = (x, y) => { return x * x + y; }; //接下来来看看表达式目录树 Expression<Func<int, int, int>> expression = (x, y) => x * x + y; //这个地方是把Func做为一个类型 传入Expression中,里面的方法体是和上面的Func相同 //是同Func或者说Action不同的是 Funk中的方法体是直接 计算 //而在表达式目录树中会转换为 Add(multiplication(x*x)+y)
即为
-
当然 Expression也可以作为lambda表达式操作
//而在表达式目录树中会转换为 Add(multiplication(x,x)+y) //在表达式目录树后加上Compile 即可把目录树转换为Lambda表达式,Compile官方给出的定义即为: //编译表达式树由描述为可执行代码的 lambda 表达式,并生成一个委托,表示 lambda 表达式。 int sumNum = expression.Compile().Invoke(12, 12); //这两个运行后得到的结果是相同的 int sumNum1 = func.Invoke(12, 12);