Incorrect number of parameters supplied for lambda declaration

China☆狼群 提交于 2019-12-29 07:43:38

问题


Please have a look at my code: I'm trying to create myCar with an Expression Tree.

I get an ArgumentException on this line var m = Expression.Lambda<Func<Engine,... The message is Incorrect number of parameters supplied for lambda declaration.

public class Engine
{
    public string Name { get; private set; }
    public Engine(string name)
    {
        Name = name;
    }
}
public class Car
{
    private readonly Engine engine;
    public Car(Engine engine)
    {
        this.engine = engine;
    }
    public string GetEngineName(){return engine.Name;}
}
class Program
{
    static void Main(string[] args)
    {
        var ci = typeof (Car).GetConstructor(new[] {typeof (Engine)});

        var engine = Expression.Parameter(typeof (Engine));

        var m = Expression.Lambda<Func<Engine,Car>>(Expression.New(ci, engine))
                          .Compile();

        var myCar = m(new Engine("TDI 2.0"));
        var s = myCar.GetEngineName();
    }
}

I can't figure out what's wrong and where I did the error. Thanks in advance.


回答1:


You must specify the engine in the 'params ParameterExpression[] parameters' part of Expression.Lambda

var m = Expression.Lambda<Func<Engine, Car>>(Expression.New(ci, engine), engine)


来源:https://stackoverflow.com/questions/4758817/incorrect-number-of-parameters-supplied-for-lambda-declaration

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!