首页新闻找找看学习计划

求拼接 a[i-1] * i 的表达式树的代码,像下面这样

0
[已解决问题] 解决于 2014-09-05 11:13

    //a[i-1] * i;
            paramExp1 = Expression.Parameter(typeof(string), "a");
            paramExp2 = Expression.Parameter(typeof(int), "i");
            constantExp = Expression.Constant(1);
            BinaryExpression subExp = Expression.Subtract(paramExp2, constantExp);


            ;//调用字符串类型的参数paramExp1的ToCharArray方法或索引


            mutiplyExp = Expression.Multiply(indexExp, paramExp2);
            del = Expression.Lambda(mutiplyExp, paramExp1, paramExp2).Compile();
            Console.WriteLine("Expression a[i-1] * i: " + del.DynamicInvoke("000", 1));

//如果可以的话,顺便说说怎么调用参数的方法

北在北方的主页 北在北方 | 菜鸟二级 | 园豆:206
提问于:2014-09-05 09:39
< >
分享
最佳答案
1
            var paramExp1 = Expression.Parameter(typeof(string), "a");
            var paramExp2 = Expression.Parameter(typeof(int), "i");
            var constantExp = Expression.Constant(1);
            BinaryExpression subExp = Expression.Subtract(paramExp2, constantExp);

            var method = typeof(string).GetMethod("ToCharArray", new Type[0]);
            var callExpression = Expression.Call(paramExp1, method);

            var indexExp = NewArrayExpression.ArrayAccess(callExpression, subExp);
            var charToIntExp = Expression.Convert(indexExp, typeof(int));

            var mutiplyExp = Expression.Multiply(charToIntExp, paramExp2);
            var del = Expression.Lambda(mutiplyExp, paramExp1, paramExp2).Compile();
            Console.WriteLine("Expression a[i-1] * i: " + del.DynamicInvoke("000", 1));
奖励园豆:5
519740105 | 大侠五级 |园豆:5810 | 2014-09-05 10:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册