我有一个列表,如果名称字段不是boolean字段状态设置为true
>哈哈即可。以下是我认为它可以起作用但显然不是:
ObjectList.ForEach(x => !x.name.Equals("haha")).status = true;
我收到以下错误:
Only assignment, call, increment, decrement, await...can be used as a statement
我可以知道我的表达中哪一部分错了吗?
答案 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
不返回任何内容。它会针对列表中的每个项目执行您提供的委托,这就是全部。
我个人只是将Where
与foreach
循环一起使用:
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;
});
我认为你试图达到同样目的。