c# – 为lambda声明提供的参数数量不正确

请看一下我的代码:我正在尝试使用表达式树创建myCar.

在这行上得到一个ArgumentException var m = Expression.Lambda< Func< Engine,...
消息是为lambda声明提供的参数数量不正确.

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();
    }
}

我无法弄清楚什么是错的,我在哪里做错了.提前致谢.

解决方法

您必须在Expression.Lambda的’params ParameterExpression [] parameters’部分中指定引擎
var m = Expression.Lambda<Func<Engine,engine),engine)

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...