为调用方法提供的参数数量不正确。 Expression.call(MethodInfo,Expression)

时间:2018-04-04 01:52:23

标签: c# .net lambda

以下代码:

  1. 创建Lambda表达式
  2. 将其编译为方法
  3. 通过Expression.Call
  4. 调用方法

    code

    public static void Main()
    {
        ParameterExpression paramExpr = Expression.Parameter(typeof(int), "arg");
    
        LambdaExpression lambdaExpr = Expression.Lambda(
            Expression.Add(
                paramExpr,
                Expression.Constant(1)
            ),
            new List<ParameterExpression>() { paramExpr }
        );
    
        Console.WriteLine(lambdaExpr);
    
        var method = lambdaExpr.Compile().Method;
    
        var expressions = new Expression[]
        {
            Expression.Constant(5)
        };
        Expression.Call(method, expressions);
    
    }
    

    错误

      

    运行时异常(第27行):提供的参数数量不正确   用于调用方法&#39; Int32   lambda_method(System.Runtime.CompilerServices.Closure,Int32)&#39;

    System.Runtime.CompilerServices.Closure来自哪里?

    如何使用Expression.Call调用此方法?

    我知道还有其他方法可以实现相同的目标,例如调用lambdaExpr.Compile().DynamicInvoke(),但由于受到约束,我需要以上述方式执行此操作。

0 个答案:

没有答案