C# 更改foreach内部的集合

C# 更改foreach内部的集合,c#,linq,C#,Linq,这是我的密码: foreach (OrderItem item in OrderInfo.order) { orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count; } 它给出了一个例外。 我知道我无法更改foreach内部的收藏 如何更改此代码以使其正常工作?最好是使用LINQ代码 异常表示集合已修改。抱歉,无法提供真正的异常

这是我的密码:

foreach (OrderItem item in OrderInfo.order)
{
     orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToString()).numericUpDown.Value = item.count;
}
它给出了一个例外。 我知道我无法更改foreach内部的收藏 如何更改此代码以使其正常工作?最好是使用LINQ代码

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

对不起,伙计们。我发现了收藏的变化。它在*numericUpDown\u ValueChanged*处理程序中。不管怎样,我已经有了答案。谢谢

您可以使用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;
}
提示:就性能而言,最好使用第二种方法。

您可以使用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())
{
     ...
}

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

当我需要修改集合时,我会这样做

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

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

您可以使用每个静态方法的扩展:

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

您可以使用每个静态方法的扩展:

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


当您在此循环内更改OrderInfo.order集合时?据我所知,你只是更新了你的界面…有什么例外?OrderItemView的类型是什么,它有哪些成员?此代码是否在UI线程外运行?可能是您将编写您得到的异常类型?我看到OrderInfo.order没有更改。但我还是得到了这个例外。我不知道你为什么在这个循环中更改OrderInfo.order集合?据我所知,你只是更新了你的界面…有什么例外?OrderItemView的类型是什么,它有哪些成员?此代码是否在UI线程外运行?可能是您将编写您得到的异常类型?我看到OrderInfo.order没有更改。但我还是得到了这个例外。我不知道为什么你肯定这能帮上忙?你在哪里看到ODER集合的变化?@HamletHakobyan可能,这是值设置程序中的一个副作用-如果不看到代码,我们无法知道。但是,这是枚举器无效问题的解决方案。for循环肯定会解决这个问题。@a你不知道。他可能正在更改集合值设置器。如果看不到完整的代码,你就无法知道。你确定这有帮助吗?你在哪里看到ODER集合的变化?@HamletHakobyan可能,这是值设置程序中的一个副作用-如果不看到代码,我们无法知道。但是,这是枚举器无效问题的解决方案。for循环肯定会解决这个问题。@a你不知道。他可能正在更改集合值设置器。如果看不到完整的代码,你就无法知道。你确定这有帮助吗?您在哪里看到ODER集合的更改?您确定这有帮助吗?您在哪里看到odrer系列的更改?