我一直试图弄清楚如何使用Expression类来实现一些简单的数学。
我要做的是这个
(1 + 10 * 15)
当我尝试通过Expression.Add和Expression.Constant来做这件事时,我得到的结果就是这个
((1 + 10) * 15)
这是不对的,因为它首先评估1 + 10而不是10 * 15。
有没有办法组合Expression.Add / Multiply等..没有它创建括号?我认为有,但我找不到在哪里或如何!
我的测试代码就是这个
var v1 = Expression.Constant(1, typeof(int));
var v2 = Expression.Constant(10, typeof(int));
var v3 = Expression.Constant(15, typeof(int));
var a1 = Expression.Add(v1, v2);
var m2 = Expression.Multiply(a1, v3);
感谢您的时间,
理查德。
答案 0 :(得分:2)
var a1 = Expression.Multiply(v2, v3)
var m2 = Expression.Add(a1, v1)
答案 1 :(得分:1)
你必须先进行乘法运算:
Expression.Add(v1, Expression.Multiply(v2, v3))
答案 2 :(得分:1)
而不是
var a1 = Expression.Add(v1, v2);
var m2 = Expression.Multiply(a1, v3);
试试这个
var a1 = Expression.Multiply(v2, v3);
var m2 = Expression.Add(v1, a1);
答案 3 :(得分:0)
在这里你找到一个更大的例子: http://teusje.wordpress.com/2011/08/07/c-expression-trees/ 它使用参数,常量和二进制表达式。