C#表达式树简单算法

时间:2010-12-22 10:49:49

标签: c# linq dynamic expression

我一直试图弄清楚如何使用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);

感谢您的时间,

理查德。

4 个答案:

答案 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/ 它使用参数,常量和二进制表达式。