【发布时间】:2016-09-23 11:16:23
【问题描述】:
我有一个 listView,其中包含一组具有属性 IsFavourite 的项目,我想要做的是将此属性设置为 false,对于在 Where 子句中找到的每个项目。
我做的是这样的:
myListView.Items.Cast<Event>().Where(x => x.MatchLeague == leagueName && x.MatchNation == nationName).Select(c => { c.IsFavourite = false; return c; }).ToList();
所以基本上我将所有具有一定leagueName 和nationName 的项目都取走,在这样做之后,我尝试将所有返回IsFavourite 属性的项目设置为false,并将这些项目作为列表返回。
但我得到了这个例外:
由于对象的当前状态,操作无效
我不知道我做错了什么,我过去什至使用过这种类型的代码并且一切正常,发生了什么?谢谢。
【问题讨论】:
-
这可能对你有帮助:stackoverflow.com/a/3921084
-
尝试像这样修改对象是对 LINQ 的一种非常丑陋的滥用。 LINQ 是一种查询 语言,而不是一种数据修改语言。只是不要使用这个技巧,要么返回一个新对象,要么修改
foreach循环中的项目 -
@PanagiotisKanavos 也有一个 foreach 循环我得到了这个异常,这就是为什么我在这里要求解决这个问题
-
发布 full 异常,包括调用堆栈,而不仅仅是消息。这将显示实际异常发生的位置以及任何内部异常。您可以通过调用
Exception.ToString()获得完整的例外情况。一般来说,您应该记录整个异常 -
如果您发布异常详细信息会非常有帮助,但从您发布的内容来看,我的第一个猜测是您的查询以某种方式修改了 myListView.Items 集合(例如,通过绑定、触发器等) .),因此作为快速修复,您可以尝试使用
myListView.Items.ToList()缓存集合。