C#表达式学习

127 阅读1分钟

在 C# 中,算术运算符,有以下类型

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符

这些运算符根据参数的多少,可以分作一元运算符、二元运算符、三元运算符。本文将围绕这些运算符,演示如何使用表达式树进行操作。

对于一元运算符和二元运算符的 Expression 的子类型如下:

UnaryExpression; //一元运算表达式
BinaryExpression; //二元运算表达式

实例代码:

 #region 表达式
            //ParameterExpression a = Expression.Parameter(typeof(int), "a");
            //ParameterExpression b = Expression.Parameter(typeof(int), "b");
            //// ab = a + b
            //BinaryExpression ab = Expression.Add(a, b);
            //// 打印 a + b 的值
            //MethodCallExpression method = Expression.Call(null, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(int) }), ab);
            //Console.WriteLine(method);
            //Expression<Action<int, int>> lambda = Expression.Lambda<Action<int, int>>(method, a, b);
            //lambda.Compile()(100, 200);

            ParameterExpression a = Expression.Parameter(typeof(int), "a");//左边类型,右边参数名称
            ParameterExpression b = Expression.Parameter(typeof(int), "b");

            //Expression.Constant 常数表达式,左边值,右边类型
            // 别忘记了赋值
            BinaryExpression aa = Expression.Assign(a, Expression.Constant(100, typeof(int)));//赋值操作,右边的值赋给左边
            BinaryExpression bb = Expression.Assign(b, Expression.Constant(200, typeof(int)));

            // ab = a + b
            BinaryExpression ab = Expression.Add(a, b);//算术加法

            // 打印 a + b 的值
            MethodCallExpression method = Expression.Call(null, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(int) }), ab);

            // 以块的形式执行代码,相当于{ }
            // 不需要纠结这里,后面会有详细说明,重点是上面
            var call = Expression.Block(new ParameterExpression[] { a, b }, aa, bb, method);//包含变量的表达式 相当于{}
            Expression<Action> lambda = Expression.Lambda<Action>(call);
            lambda.Compile()();//编译表达式


            #endregion

运行结果

image.png 参考链接:www.cnblogs.com/whuanle/p/1… www.cnblogs.com/whuanle/p/1…