更改foreach中的集合

本文关键字:集合 foreach 更改 | 更新日期: 2023-09-27 17:54:53

下面是我的代码:

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

给出一个异常。
我知道我不能改变foreach
里面的集合如何更改此代码以使其工作?最好是LINQ代码。

异常表示"集合已被修改"。很抱歉不能提供真正的异常消息,因为它是非英语的

对不起人。我发现了收藏的变化。它在*numericUpDown_ValueChanged*处理程序中。不管怎样,我有答案了。谢谢你

更改foreach中的集合

您可以使用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;
}

提示:性能方面,最好使用第二种方法

当我需要修改集合时,我就是这样做的。

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

创建副本。列举副本,但更新原始副本。

您可以使用扩展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));
        }
    }