Expression
程序员文章站
2022-07-08 19:52:05
表达式目录树 1.什么是表达式目录树Expression? 表达式目录树是一个数据结构,语法树。 首先我们去看看 Expressions类 ,定义了一个泛型委托类型 TDelegate: 我们先来一个带返回值的委托: 其中m、n是两个Int 类型的参数 通过表达式目录树计算 m*n+2: 通过中间语 ......
表达式目录树
1.什么是表达式目录树expression?
表达式目录树是一个数据结构,语法树。
首先我们去看看 expressions类 ,定义了一个泛型委托类型 tdelegate:
1 // 摘要: 2 // 将强类型化的 lambda 表达式表示为表达式树形式的数据结构。 此类不能被继承。 3 // 4 // 类型参数: 5 // tdelegate: 6 // 该委托的类型, system.linq.expressions.expression`1 表示。 7 public sealed class expression<tdelegate> : lambdaexpression
我们先来一个带返回值的委托: 其中m、n是两个int 类型的参数
1 func<int, int, int> func = (m, n) => m * n + 2;
//lambda实例化委托 是个方法 是实例化委托的参数
int iresult1 =func.invoke(1,3); //调用执行
通过表达式目录树计算 m*n+2:
1 expression<func<int, int, int>> exp = (m, n) => m * n + 2; 2 int iresult2 = exp.compile().invoke(1, 2);
//complie()方法将编译表达式树由描述为可执行代码的 lambda 表达式,并生成一个委托,表示 lambda 表达式。所以可以调用invoke方法。
通过中间语言il反编译查看源码 expression<func<int, int, int>> exp = (m, n) => m * n + 2
表达式目录树结构拆分步骤:
手动拼装表达式目录树 m * n + m + n + 2;
1 { 2 //expression<func<int, int, int>> expression = (m, n) => m * n + m + n + 2; 3 //int iresult = expression.compile().invoke(1, 2); 4 5 parameterexpression m = expression.parameter(typeof(int), "m"); //第一个参数 m 6 parameterexpression n = expression.parameter(typeof(int), "n"); //第二个参数 n 7 var constant = expression.constant(2); //常量 2 8 9 var mutiply = expression.multiply(m, n); // m*n 10 var plus1 = expression.add(mutiply, m); // m*n+m 11 var plus2 = expression.add(plus1, n); //m*n+m+n 12 var plus3 = expression.add(plus2, constant); //m*n+m+n+2 13 expression<func<int, int, int>> expression = expression.lambda<func<int, int, int>>(plus3, new parameterexpression[] { m, n });
//组装表达式目录树 14 int iresult = expression.compile().invoke(1, 2);//调用 15 }
推荐阅读
-
css expression 隔行换色
-
C# regular expression to validate email
-
CSS expression控制图片自动缩放效果代码[兼容 IE,Firefox]
-
不要使用CSS Expression的原因分析
-
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
-
AngularJs expression详解及简单示例
-
Microsoft Expression Web 简体中文正式版 官方下载地址
-
浅谈c#表达式树Expression简单类型比较demo
-
三元運算子回傳lambda expression
-
C#条件拼接Expression<Func<T, bool>>的使用