• 常用的Expression调用形式


    ConstantExpression exp1 = Expression.Constant(1);构建常量表达式(还可以加类型)
    BinaryExpression exp12 = Expression.Add(exp1, exp2);构建二元加法表达式,参数为左右两个需要相加的常量表达式或者变量
    ParameterExpression expA = Expression.Parameter(typeof(double), "a");构建参数
    -------------------------------------------------------------
    ParameterExpression expA = Expression.Parameter(typeof(double), "a"); //参数a
    MethodCallExpression expCall = Expression.Call(null, 
        typeof(Math).GetMethod("Sin", BindingFlags.Static | BindingFlags.Public), 
        expA); //Math.Sin(a)构建方法调用表达式(表示一次方法调用)
    ---------------------------------------------------
    LambdaExpression exp = Expression.Lambda(expCall, expA); //构建lambda表达式(由表达式体和参数构成这个表达式体表示为一个方法调用表达式)
    ---------------------------------------------------
    
    Expression<Func<double, double>> exp = a => Math.Sin(a);构建强类型的表达式树(表达式树字面量)
    ----------------------------------------------------------
    UnaryExpression negate= Expression.Negate(left);//构建一元-表达式如:-a
    -----------------------------------------------------------------------
    ConstantExpression strin=   Expression.Constant("hello",typeof(string));
    NewExpression negate = Expression.New(typeof(StringBuilder).GetConstructor(new Type[] { typeof(String) }), strin);
    //构造new StringBuilder("hello")
    -----------------------------------------------------------------------
    ParameterExpression a = Expression.Parameter(typeof(int), "a");
                ParameterExpression b= Expression.Parameter(typeof(int), "b");
                ParameterExpression i= Expression.Parameter(typeof(int), "i");
                BinaryExpression add = Expression.Add(a,b);
                ConstantExpression s=Expression.Constant(1);
    
                BinaryExpression substract = Expression.Subtract(i,s);
    
                NewArrayExpression arrayint= Expression.NewArrayInit(typeof(int), a, b, add);
                IndexExpression arracc= Expression.ArrayAccess(arrayint, substract);
                Console.WriteLine(arracc.ToString());
    //new [] {a, b, (a + b)}[(i - 1)]数组访问
    --------------------------------------------------------------------------
    MemberExpression mem=Expression.Property(exppro, property)//创建类型的属性表达式
    --------------------------------------
    Expression.Equal(left, right)//二元=表达式
    ----------------------------------
    Expression.GreaterThan(left, right)//二元>表达式
    ----------------------------------
    Expression.GreaterThanOrEqual(left, right)//>=
    -------------------------------
    Expression.LessThan(left, right)//<
    ---------------------------------
    Expression.LessThanOrEqual(left,right)/<=
    --------------------------------------
    return Expression.Call(left, typeof (string).GetMethod("Contains"), right)//like 字符串中包含right表达式代表的字符串
    ----------------------------------------------
     MethodCallExpression resultExp =
                                        Expression.Call(
                                            typeof (Enumerable),
                                            "Contains",
                                            new[] {left.Type},
                                            right,
                                            left)
    //构造in 比如: c=>new[] {"nn","mm"}.contains(c.name)
    --------------------------------------------
    Expression.NotEqual(left, right)//!=
    -------------------------------------------
    Expression.Call(left, typeof (string).GetMethod("StartsWith", new[] {typeof (string)}), right)//left以right字符串开始
    ------------------------------------
    Expression.Call(left, typeof (string).GetMethod("EndsWith", new[] {typeof (string)}), right)//left以right字符串结尾
    ---------------------------------------
    Expression.AndAlso(left, expression)//and 表达式&&
    -----------------------------------------
    Expression.OrElse(left, orGroupByExpAnd)//or表达式||
  • 相关阅读:
    linux(CENTOS)系统各个目录的作用详解
    2018 焦作E java 高精度暴力
    [SHOI2015]激光发生器,计算几何 直线相交
    codeforces 600E dfs+线段树合并
    2018 南京区域赛A SG打表
    8个常见的硬币博弈的SG值规律
    hdu 3389 阶梯博弈
    组合游戏与博弈好文
    gym 100500B 多项式哈希+Rabbin-Karp/最小表示法
    zjoi 2007 捉迷藏 动态点分治+可删堆
  • 原文地址:https://www.cnblogs.com/flyfish2012/p/5541678.html
Copyright © 2020-2023  润新知