Csharp/C#教程:更改foreach内的集合分享


更改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静态方法:

上述就是C#学习教程:更改foreach内的集合分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/942545.html

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐