如何创建一个动态lambda来使用它

本文关键字:lambda 动态 何创建 创建 一个 | 更新日期: 2023-09-27 18:15:58

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

例如:

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

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

如何使用表达式对象实现它?我没有在表达式中找到任何方法来设置属性…是否仅用于检索属性值?

如何创建一个动态lambda来使用它

赋值在。net 4中确实存在于表达式树中(参见Expression.Assign)(它用于支持dynamic),但c#编译器不支持它,c#编译器仍然只支持将lambda表达式转换为表达式树的真正"表达式"。

我很确定Linq表达式不支持赋值。我认为你需要写一个带有赋值的方法,并把它放在表达式中。

更新:看起来赋值在。net 4中支持。请看Jon Skeet的回答

你可以这样做:

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

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