我想从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);
}
}
感谢您的帮助!
答案 0 :(得分:2)
您在枚举时无法更改集合。
这是一种更好的方法:
main.favouritesToolStripMenuItem.DropDownItems.Remove(
items.Items.OfType<ToolStripMenuItem>().FirstOrDefault(
item => item.Text == listBox1.SelectedItem.ToString()));
这会删除第一个匹配元素,因为user1512185指出,但从我收集的内容来看,无论如何这都是你的意图。
答案 1 :(得分:1)
这种情况正在发生,因为您正在修改要枚举的集合。从集合中删除项目后,任何现有的枚举器都将失效。
你可以:
1)修改集合后退出循环
2)通过将.ToList()附加到它来迭代集合的COPY
3)使用for循环手动迭代自己。请注意,您必须了解修改集合将如何与您的迭代器/索引变量进行交互。如果您不小心,可以使索引超出范围异常,或跳过您从未想过的元素。
答案 2 :(得分:0)
当您同时在foreach
循环中迭代同一个集合时,无法从集合中删除项目。