如何创建动态lambda来使用它?

时间:2011-11-25 16:23:52

标签: c# linq lambda foreach expression

我学会了用Expression类操作动态lambda表达式。 但是,ForEach方法(LINQ)中使用的lambda表达式似乎有点不同,因为它是一个赋值。

例如,这样做:

myList.ForEach(x => x.Status = "OK") ;

将更新myList列表中每个对象的Status属性。

如何使用Expression对象完成它?我没有在Expression中找到任何设置属性的方法......它是否仅用于检索属性值?

3 个答案:

答案 0 :(得分:6)

从.NET 4开始,

存在于表达式树中(参见Expression.Assign)(用于支持dynamic),但C#编译器不支持它,它仍然只支持lambda表达式转换为表达式树的真正“表达式”。

答案 1 :(得分:1)

我很确定Linq Expressions不支持分配。我认为你需要编写一个带有赋值的方法并将其放在表达式中。

更新:从.NET 4开始,支持 分配。请参阅Jon Skeet的回答。

答案 2 :(得分:0)

你可以这样做:

myList.ForEach(x =>
{
    x.Status = "OK";
});

Action<YourType> oSetter = x =>
{
    x.Status = "OK";
});
myList.ForEach(oSetter);