2010-12-22 89 views
2

我一直在想如何使用Expression類來實現一些簡單的數學。C#表達式樹簡單算術

我想要做的就是這個

(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); 

感謝您的時間,

理查德。

回答

2
var a1 = Expression.Multiply(v2, v3) 
var m2 = Expression.Add(a1, v1) 
+1

我之前試過這個,它是按照預期工作的,但是因爲這是更大圖片的一部分,所以從零件分析和構建零件的順序首先是加。 因此,我將不得不按照BODMAS的順序對錶達式進行正確構建? – 2010-12-22 11:05:31

1

你必須先做好乘法:

Expression.Add(v1, Expression.Multiply(v2, v3)) 
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);