在 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
运行结果
参考链接:www.cnblogs.com/whuanle/p/1…
www.cnblogs.com/whuanle/p/1…