Lambda未能更新价值?

时间:2014-02-10 07:21:36

标签: c# lambda

我有一个列表,如果名称字段不是boolean字段状态设置为true >哈哈即可。以下是我认为它可以起作用但显然不是:

ObjectList.ForEach(x => !x.name.Equals("haha")).status = true;

我收到以下错误:

Only assignment, call, increment, decrement, await...can be used as a statement

我可以知道我的表达中哪一部分错了吗?

3 个答案:

答案 0 :(得分:3)

假设对象列表是IEnumerable<T>

foreach (var toChange in ObjectList.Where(x => !x.name.Equals("haha"))){
    toChange.Status = true;
}

也可以ObjectList.Where(x => !x.name.Equals("haha")).ToList().ForEach(x => x.Status = true)

答案 1 :(得分:2)

那肯定不会做你想要的。 ForEach不返回任何内容。它会针对列表中的每个项目执行您提供的委托,这就是全部。

我个人只是将Whereforeach循环一起使用:

foreach (var item in ObjectList.Where(x => x.name != "haha"))
{
    item.status = true;
}

确切的错误本身是因为表达式的!部分。您在ForEach中执行的操作属于Action<T>类型。所以你有效地得到了:

Action<Foo> action = x => !x.name.Equals("haha");

这与该陈述无效的方式无效:

!x.name.Equals("haha"); // Invalid

一元!表达式不是语句表达式 - 您不能将它自己用作语句。如果你刚才:

x.name.Equals("haha");

那么它作为方法调用语句是有效的 - 但仍然没用。

答案 2 :(得分:1)

代码稍有变化的foreach可以解决问题,

       ObjectList.ForEach(obj =>
        {
            if (!obj.name.Equals("haha"))
                obj.status = true;
        });

我认为你试图达到同样目的。