博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表达式树
阅读量:4319 次
发布时间:2019-06-06

本文共 3606 字,大约阅读时间需要 12 分钟。

 

 

Console.WriteLine("***********************************************");            {                //1.0获取方法                MethodInfo method = typeof(string).GetMethod("Substring", new[] { typeof(int), typeof(int) });                //2.0构造表达式树的参数                ParameterExpression target = Expression.Parameter(typeof(string), "s");                ParameterExpression firstParam = Expression.Parameter(typeof(int), "a");                ParameterExpression secondParam = Expression.Parameter(typeof(int), "b");                //3.0构造方法的参数                Expression[] methodArgs = new[] { firstParam, secondParam };                Expression call = Expression.Call(target, method, methodArgs);                Console.WriteLine(call);//  s.Substring(a,b);                //4.0将表达式树的参数构造成 lambda表达式的参数                var lambdaParam = new[] { target, firstParam, secondParam };                foreach (var parameterExpression in lambdaParam)                {                    Console.WriteLine(parameterExpression);//s,a,b                }                //5.0构造 lambda表达式树                var lambda = Expression.Lambda
>(call, lambdaParam); Console.WriteLine(lambda);// (s,a,b)=>s.Substring(a,b); //6.0将 lambda表达式树转换成 lambda表达式 var compile = lambda.Compile(); //7.0执行委托 var result = compile("wjire", 0, 3); Console.WriteLine(result); } Console.WriteLine("***********************************************"); { //1.0获取方法 MethodInfo method = typeof(string).GetMethod("Substring", new[] { typeof(int), typeof(int) }); //2.0构造表达式树的参数 ParameterExpression target = Expression.Parameter(typeof(string), "s"); //2.5设置表达式树的常量 ConstantExpression firstParam = Expression.Constant(0); ConstantExpression secondParam = Expression.Constant(3); //3.0构造方法的参数 Expression[] methodArgs = new[] { firstParam, secondParam }; Expression call = Expression.Call(target, method, methodArgs); Console.WriteLine(call);// s.Substring(0,3); //4.0将表达式树的参数构造成 lambda表达式的参数 var lambdaParam = new[] { target }; foreach (var parameterExpression in lambdaParam) { Console.WriteLine(parameterExpression);//s } //5.0构造 lambda表达式树 var lambda = Expression.Lambda
>(call, lambdaParam); Console.WriteLine(lambda);// s=>s.Substring(0,3); //6.0将 lambda表达式树转换成 lambda表达式 var compile = lambda.Compile(); //7.0执行委托 var result = compile("wjire"); Console.WriteLine(result); } Console.WriteLine("***********************************************"); { PropertyInfo property = typeof(Person).GetProperty("Id"); var target = Expression.Parameter(typeof(Person), "p"); var pro = Expression.Property(target, property); Console.WriteLine(pro);// p.Id var lambdaParam = new[] { target }; var lambda = Expression.Lambda
>(pro, lambdaParam); Console.WriteLine(lambda);// p=>p.Id var compile = lambda.Compile(); var result = compile(new Person { Id = 123 }); Console.WriteLine(result); }

 

转载于:https://www.cnblogs.com/refuge/p/8679040.html

你可能感兴趣的文章
定位问题 vue+element-ui+easyui(兼容性)
查看>>
四叶草(css)
查看>>
nginx——前端服务环境
查看>>
vue+element-ui 字体自适应不同屏幕
查看>>
Vue 循环为选中的li列表添加效果
查看>>
vue创建脚手架 cil
查看>>
ArcGIS分支版本化( Branch Versioning )技术介绍
查看>>
scrapy过滤重复数据和增量爬取
查看>>
scrapy-redis源码浅析
查看>>
tupian
查看>>
selenium定位非select下拉框的元素 ,定位不到
查看>>
用elasticsearch分析中国大学省份分布
查看>>
elasticsearch 常用查询 + 删除索引
查看>>
sops的配置过程
查看>>
prometheus+grafana监控Linux和kubernetes的例子
查看>>
kubernetes 简单 hello world nginx svc deployment
查看>>
kubenetes 的svc从ClusterPort 改为NodePort
查看>>
kube-metric在kubernetes上的部署
查看>>
kubespray 修改配置
查看>>
部署kubernetes-prometheus和用kubespray部署kubernetes后修改kubelet的
查看>>