小编Phi*_*mer的帖子

如何在C#/ .NET中使用LINQ表达式树调用lambda

我想使用表达式树动态创建一个方法来调用lambda.第一次调用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;
}
Run Code Online (Sandbox Code Playgroud)

如何获取并传递此闭包对象?

.net c# linq lambda expression-trees

3
推荐指数
1
解决办法
4030
查看次数

标签 统计

.net ×1

c# ×1

expression-trees ×1

lambda ×1

linq ×1