1

这是我的代码:

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

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

异常表示“集合已修改”。抱歉无法提供真正的异常消息,因为它是非英语的

对不起大家。我发现收藏在哪里发生了变化。它在 *numericUpDown_ValueChanged* 处理程序中。反正我有答案。谢谢你

4

3 回答 3

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;
}

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

于 2013-01-19T09:57:24.490 回答
2

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

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

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

于 2013-01-19T09:58:08.640 回答
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));
        }
    }
于 2017-11-25T16:35:57.667 回答