这是我的代码:
foreach (OrderItem item in OrderInfo.order)
{
orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count;
}
它给出了例外。
我知道我无法更改 foreach 中的集合
如何更改此代码以使其正常工作?最重要的是它是LINQ代码。
异常表示“该集合已被修改”。抱歉无法提供真实的异常消息,因为它在非英语中
抱歉,伙计们。我发现收藏正在发生变化。它在* numericUpDown_ValueChanged *处理器内。无论如何我得到了答案。谢谢答案 0 :(得分:7)
您可以使用ToList()
,如下所示:
foreach (OrderItem item in OrderInfo.order.ToList())
{
orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count;
}
或者使用普通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;
}
提示:性能明智,最好使用第二种方式。
答案 1 :(得分:2)
当我需要修改集合时,这就是我的工作。
foreach (OrderItem item in OrderInfo.order.ToList())
{
...
}
创建副本。枚举副本,但更新原始副本。
答案 2 :(得分:0)
您可以使用扩展ToEach静态方法:
public delegate void ToEachTransformAction<T>(ref T Telement);
[Extension()]
public static void ToEach<T>(Generic.IList<T> thislist, ToEachTransformAction<T> Transform)
{
for (var n = 0; n < thislist.Count; n++)
{
Transform.Invoke(thislist(n));
}
}