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

标签 c# .net lambda expression-trees

请看一下我的代码:我正在尝试创建 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, Car>>(Expression.New(ci, engine), engine)

关于c# - 为 lambda 声明提供的参数数量不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4758817/

相关文章:

php - array_map 二维数组到一维关联数组

c# - 如何向 OpsGenie 发出 POST 请求?

c# - .NET WebClient - 上传数据并获取流

c# - Entity Framework : TransactionScope has a different IsolationLevel

c# - 如何计算 C# 解决方案中没有注释和空行以及其他冗余内容等的代码行数?

c++ - "Lambdas are cheap"- 真的吗?在什么情况下?

c++ - "Refresh"一个 lambda 对象

c# - 如何在 C# 中计算每个新行的所有行的总和

c# - jquery ajax post 到 .aspx 页面加载 - 如何读取发布的变量?

c# - 从没有按钮的代码更新 WinForm 标签值