c# – Foreach没有经过所有项目?
发布时间:2020-12-15 20:46:49 所属栏目:百科 来源:网络整理
导读:我有这个代码: foreach (var item in ListView1.Items) { ListView1.Items.Remove(item); ListView21.Items.Add(item); } 循环停在一半的项目? 任何的想法? 编辑 好吧,也许这是我的错误,我需要澄清这是来自Infrajistics的UltraListView控件,我无法将项目
我有这个代码:
foreach (var item in ListView1.Items) { ListView1.Items.Remove(item); ListView21.Items.Add(item); } 循环停在一半的项目? 任何的想法? 编辑 好吧,也许这是我的错误,我需要澄清这是来自Infrajistics的UltraListView控件,我无法将项目添加到另一个列表,除非我将其删除或从原始列表中克隆它. 但是,谢谢,大多数关于不修改循环内列表的注释是正确的,所以这段代码有效: foreach (var item in listView1.Items) { var i = item.Clone(true); listView2.Items.Add(i); } listView1.Items.Clear(); 谢谢, 解决方法
你不能修改迭代集合,它应该死于异常(或未定义的行为).
尝试制作数组的副本: foreach (var item in ListView1.Items.ToArray()) { ListView1.Items.Remove(item); ListView21.Items.Add(item); } 编辑: 实际上,您的示例代码可以通过编写来实现: ListView21.Items.AddRange(ListView1.Items); ListView1.Items.Clear(); (事实上??,这并不完全是你在做什么,但给出相同的结果,我认为它不会打扰你在两个列表视图中暂时拥有相同的内容).从.NET2.0开始支持后者,第一个解决方案需要linq,因此需要.NET3.5. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |