我在尝试循环列表框然后删除项目时收到以下错误.
已修改此枚举器绑定的列表.只有在列表不更改时才能使用枚举器.
foreach (string s in listBox1.Items) { MessageBox.Show(s); //do stuff with (s); listBox1.Items.Remove(s); }
如何删除项目并仍然循环浏览内容?
要删除所有商品吗?如果是这样,foreach
请先执行,然后使用Items.Clear()
以后删除所有这些.
否则,可能由索引器向后循环:
listBox1.BeginUpdate(); try { for(int i = listBox1.Items.Count - 1; i >= 0 ; i--) { // do with listBox1.Items[i] listBox1.Items.RemoveAt(i); } } finally { listBox1.EndUpdate(); }
其他人都发布了"向后退"的答案,所以我会提供替代方案:创建一个要删除的项目列表,然后在最后删除它们:
Listremovals = new List (); foreach (string s in listBox1.Items) { MessageBox.Show(s); //do stuff with (s); removals.Add(s); } foreach (string s in removals) { listBox1.Items.Remove(s); }
有时候"向后工作"的方法更好,有时上面的方法更好 - 特别是如果你正在处理一个有RemoveAll(collection)
方法的类型.值得一提的是.
这里我的解决方案没有后退,没有临时列表
while (listBox1.Items.Count > 0) { string s = listBox1.Items[0] as string; // do something with s listBox1.Items.RemoveAt(0); }