Как вызвать лямбду, используя деревья выражений LINQ в C # / .NET

Я хочу использовать деревья выражений для динамического создания метода для вызова лямбда-выражения. Следующий код работает нормально для первого вызова функции ComposeLambda, но второй вызов завершается ошибкой со следующим сообщением об ошибке.

Указано неверное количество аргументов для вызова метода «Int32 lambda_method (System.Runtime.CompilerServices.Closure, Int32)»

{
    Func<int, int> innerLambda = i => i + 1;    
    var composedLambda = ComposeLambda(innerLambda);
    Console.WriteLine(composedLambda.DynamicInvoke(0));
    var composedLambda2 = ComposeLambda(composedLambda);
    Console.WriteLine(composedLambda2.DynamicInvoke(0));
}

private static Delegate ComposeLambda(Delegate innerLambda)
{
    Func<int, int> outerLambda = i => i + 2;
    var parameter = Expression.Parameter(typeof (int));
    var callInner = Expression.Call(innerLambda.GetMethodInfo(), parameter);
    var callOuter = Expression.Call(outerLambda.GetMethodInfo(), callInner);
    var composedLambdaType = typeof (Func<,>).MakeGenericType(typeof (int), typeof (int));
    var composedLambdaExpression = Expression.Lambda(composedLambdaType, callOuter, parameter);
    var composedLambda = composedLambdaExpression.Compile();
    return composedLambda;
}

Как я могу получить и передать этот объект замыкания?

Ответы на вопрос(1)

Ваш ответ на вопрос