更改foreach内的集合

这是我的代码:

foreach (OrderItem item in OrderInfo.order) { orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count; } 

它给了一个例外。
我知道我无法改变foreach内部的集合
如何更改此代码以使其正常工作? 最重要的是它是LINQ代码。

例外说“该集合已被修改”。 抱歉无法提供真实的exception消息,因为它非英语

对不起大家。 我发现collections正在发生变化。 它在* numericUpDown_ValueChanged *处理器内。 无论如何我得到了答案。 谢谢

你可以使用ToList() ,像这样:

 foreach (OrderItem item in OrderInfo.order.ToList()) { orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count; } 

或者使用normal for循环:

 for (int i = 0 ; i < OrderInfo.order.Count; i++) { OrderItem item = OrderInfo.order[i]; orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count; } 

提示 :性能明智,使用第二种方式更好。

当我需要修改集合时,这就是我的工作。

 foreach (OrderItem item in OrderInfo.order.ToList()) { ... } 

创建一个副本。 枚举副本,但更新原始副本。

您可以使用扩展ToEach静态方法:

 public delegate void ToEachTransformAction(ref T Telement); [Extension()] public static void ToEach(Generic.IList thislist, ToEachTransformAction Transform) { for (var n = 0; n < thislist.Count; n++) { Transform.Invoke(thislist(n)); } }