InvalidOperationException with ToolStripDropDown

本文关键字:ToolStripDropDown with InvalidOperationException | 更新日期: 2023-09-27 18:25:31

我想从ToolStripMenuItem中删除一个项,但它给了我一个错误

mscorlib.dll 中发生"System.InvalidOperationException"类型的未处理异常

附加信息:集合已更改。枚举操作可能无法执行。

我的代码:

ToolStripDropDown items = main.favouritesToolStripMenuItem.DropDown;
foreach(var item in items.Items.OfType<ToolStripMenuItem>()) 
{
    if (item.Text == listBox1.SelectedItem.ToString())
    {
        main.favouritesToolStripMenuItem.DropDownItems.Remove(item);
    }
}

谢谢你给我的任何帮助!

InvalidOperationException with ToolStripDropDown

枚举集合时不能更改集合。

这里有一个更好的方法:

main.favouritesToolStripMenuItem.DropDownItems.Remove(
    items.Items.OfType<ToolStripMenuItem>().FirstOrDefault(
          item => item.Text == listBox1.SelectedItem.ToString())); 

正如user1512185所指出的,这将删除第一个匹配元素,但据我所知,这无论如何都是你的意图。

发生这种情况是因为您正在修改要枚举的集合。从集合中删除项后,任何现有枚举器都将失效。

您可以:

1) 修改集合后退出循环

2) 通过将.ToList()附加到集合的一个副本来遍历该副本

3) 使用for循环手动迭代。请注意,您必须了解修改集合将如何与迭代器/索引变量交互。如果您不小心,您可能会得到超出范围的索引异常,或者跳过从未打算跳过的元素。

foreach循环中同时迭代同一集合时,不能从集合中删除项。

相关文章:
  • 没有找到相关文章