Существует ли ошибка с вложенным, вызывают LambdaExpression?

Я пытался скомпилировать и вычислить LambdaExpression как:

Плюс (10, плюс (1,2))

Но результат равняется 4, не 13.

Код:

using System;
using System.Linq.Expressions;

namespace CheckLambdaExpressionBug
{
    class Program
    {
        static void Main(string[] _args)
        {
            ParameterExpression p1 = Expression.Parameter(typeof (int), "p1");
            ParameterExpression p2 = Expression.Parameter(typeof (int), "p2");
            LambdaExpression lambda = Expression.Lambda(Expression.Call(typeof(Program).GetMethod("Plus"), p1, p2), p1, p2);

            InvocationExpression exp1 = Expression.Invoke(
                lambda,
                Expression.Constant(1),
                Expression.Constant(2)
                );

            InvocationExpression exp2 = Expression.Invoke(
                lambda,
                Expression.Constant(10),
                exp1
                );

            var func = (Func<int>) Expression.Lambda(exp2).Compile();

            int v = func();
            Console.Out.WriteLine("Result = {0}", v);
        }

        public static int Plus(int a, int b)
        {
            return a + b;
        }
    }
}
15
задан kitafan 5 July 2010 в 08:43
поделиться

3 ответа

тогда как это, похоже, дает 13 в 3.5 тоже:

     var plus = new Func<int, int, int>((a, b) => a + b);
     var func = new Func<int>(() => plus(10, plus(1, 2)));
     var res = func();
     Console.WriteLine(res);
0
ответ дан 1 December 2019 в 05:34
поделиться

возможно, мне нужно присвоить результат локальному переменному попробуйте это

var plus = new Func((a, b) => a + b); var puls_1 = plus(1, 2); var func = new Func(() => plus(10, plus_1)); var res = func(); Console.WriteLine(res);

0
ответ дан 1 December 2019 в 05:34
поделиться

Поскольку никто, похоже, не публикует это:

Похоже, это ошибка в .NET 3.5, и она исправлена в .NET 4.

1
ответ дан 1 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: