C# Expression Tree Проста аритметика

Опитвах се да разбера как да постигна някои прости математически изчисления с помощта на класа 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);

Благодаря за отделеното време,

Ричард.


person Richard Adnams    schedule 22.12.2010    source източник


Отговори (4)


Първо трябва да направите своето умножение:

Expression.Add(v1, Expression.Multiply(v2, v3))
person Jan    schedule 22.12.2010

Вместо

    var a1 = Expression.Add(v1, v2);
    var m2 = Expression.Multiply(a1, v3);

пробвай с това

    var a1 = Expression.Multiply(v2, v3);
    var m2 = Expression.Add(v1, a1);
person TRIVER    schedule 22.12.2010

Тук ще намерите по-голям пример: http://teusje.wordpress.com/2011/08/07/c-expression-trees/ Използва параметри, константи и двоични изрази.

person juFo    schedule 05.09.2011

person    schedule
comment
Опитах това преди и да, работи според очакванията, но тъй като това е част от по-голямата картина, редът, от който се анализират и изграждат частите, е плюс първо. Така че ще трябва да подредя частите по реда на BODMAS, за да може изразът да бъде изграден правилно? - person Richard Adnams; 22.12.2010