zoukankan      html  css  js  c++  java
  • 表达式树

                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<Func<string, int, int, string>>(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<Func<string, string>>(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<Func<Person, int>>(pro, lambdaParam);
                    Console.WriteLine(lambda);//    p=>p.Id    
    
                    var compile = lambda.Compile();
    
                    var result = compile(new Person { Id = 123 });
    
                    Console.WriteLine(result);
                }
  • 相关阅读:
    Shell入门教程:命令替换 $() 和 ``
    CentOS启用sudo,禁用root远程登录
    .htaccess 基础教程(四)Apache RewriteCond 规则参数
    .htaccess 基础教程(三)RewriteCond标志符,RewriteRule适用的标志符
    .htaccess 基础教程(二)
    .htaccess 基础教程(一)
    phpMyAdmin 个性化设置,字体大小设置,去掉“以树形显示数据库”,禁用“发送错误报告”
    PHP的$_SERVER['PHP_SELF']造成的XSS漏洞攻击及其解决方案
    PHP变量作用域(花括号、global、闭包)
    获取PHP文件绝对地址$_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别
  • 原文地址:https://www.cnblogs.com/refuge/p/8679040.html
Copyright © 2011-2022 走看看