我想从ToolStripMenuItem中删除一个项目,但是它给了我一个错误
System.InvalidOperationException类型的未处理异常发生在mscorlib.dll中 其他信息:集合已更改。枚举操作可能不会执行。
我的代码:
ToolStripDropDown items = main.favouritesToolStripMenuItem.DropDown;
foreach(var item in items.Items.OfType<ToolStripMenuItem>())
{
if (item.Text == listBox1.SelectedItem.ToString())
{
main.favouritesToolStripMenuItem.DropDownItems.Remove(item);
}
}谢谢你给我的帮助!
发布于 2014-10-03 14:57:24
在枚举集合时,不能更改它。
下面是一个更好的方法:
main.favouritesToolStripMenuItem.DropDownItems.Remove(
items.Items.OfType<ToolStripMenuItem>().FirstOrDefault(
item => item.Text == listBox1.SelectedItem.ToString())); 这将删除第一个匹配元素,正如user1512185所指出的,但从我所收集到的信息来看,这是您的意图。
发布于 2014-10-03 15:00:09
之所以发生这种情况,是因为您正在修改要枚举的集合。从集合中移除项后,任何现有的枚举数都将失效。
你可以:
1)修改集合后退出循环
2)通过在集合中追加.ToList()来迭代集合的副本
3)使用for循环手动迭代自己。请注意,您必须理解修改集合将如何与您的迭代器/索引变量交互。如果您不小心,可以将索引从范围异常中提取出来,或者跳过您从未想过的元素。
发布于 2014-10-03 14:57:07
当您在foreach循环中迭代同一集合时,不能从集合中移除项。
https://stackoverflow.com/questions/26181308
复制相似问题