【问题标题】:Multiple assignment operations in one lambda expression一个 lambda 表达式中的多个赋值操作
【发布时间】:2012-05-07 13:42:38
【问题描述】:

我正在尝试创建一个动态 lambda 表达式(从文本解析),它执行多个任务。创建单独的作业相当容易,但是我被困在如何组合它们上。所以我想要达到的效果是一样的:

Action<Entity> action = (entity) => 
{ 
    entity.Property1 = "1"; 
    entity.Property2 = "2";
};

有没有办法将多个 Expression.Assign 表达式组合成一个(因为 Expression.Lambda 只接受一个 Expression 作为输入)?

--编辑: 因此,为了澄清起见,我编写的代码只是伪代码,因此拼写错误(现已更正)不会改变任何内容。我现在的代码是这样的:

Expression parameter = Expression.Parameter(typeof(Entity), "param");
Expression firstProperty = Expression.Property(parameter, "Property1");
Expression first = Expression.Assign(firstProperty, "1");
Expression secondProperty = Expression.Property(parameter, "Property2");
Expression second = Expression.Assign(secondProperty, "2");
Expression final = [INSERT MAGIC HERE]
Action<Entity> action = Expression.Lambda<Action<Entity>>(final, entity).Complie();

请注意,属性名称实际上来自文本输入,并且赋值表达式的数量不限于2个,仅用于演示目的。我的问题是,是否有一个表达式可以让我组合赋值表达式,还是我必须为每个表达式创建不同的 lambda?

【问题讨论】:

  • 第二次赋值后不是少了一个分号吗?无论如何,据我所知,表达式的数量没有限制。 MSDN
  • 你得到什么编译错误?
  • 更新了描述。我没有收到编译器错误,只有在尝试 Expression 时才会出现运行时错误。例如,这是正确的,因为 Property1 = "1" && Property2 = "2" 无效。

标签: c# lambda expression-trees


【解决方案1】:

试试这个魔法:

Expression.Block(first, second);

【讨论】:

  • 不幸的是在 .net 3.5 中不存在:/
  • @Mic .NET 3.5 表达式树仅支持实际表达式,不支持语句。这就是启用 LINQ 所需的全部内容。
猜你喜欢
  • 2021-09-01
  • 1970-01-01
  • 2013-08-29
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 2018-04-01
相关资源
最近更新 更多