首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InvalidOperationException与ToolStripDropDown

InvalidOperationException与ToolStripDropDown
EN

Stack Overflow用户
提问于 2014-10-03 14:52:06
回答 3查看 88关注 0票数 0

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

System.InvalidOperationException类型的未处理异常发生在mscorlib.dll中 其他信息:集合已更改。枚举操作可能不会执行。

我的代码:

代码语言:javascript
复制
ToolStripDropDown items = main.favouritesToolStripMenuItem.DropDown;
foreach(var item in items.Items.OfType<ToolStripMenuItem>()) 
{
    if (item.Text == listBox1.SelectedItem.ToString())
    {
        main.favouritesToolStripMenuItem.DropDownItems.Remove(item);
    }
}

谢谢你给我的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-03 14:57:24

在枚举集合时,不能更改它。

下面是一个更好的方法:

代码语言:javascript
复制
main.favouritesToolStripMenuItem.DropDownItems.Remove(
    items.Items.OfType<ToolStripMenuItem>().FirstOrDefault(
          item => item.Text == listBox1.SelectedItem.ToString())); 

这将删除第一个匹配元素,正如user1512185所指出的,但从我所收集到的信息来看,这是您的意图。

票数 2
EN

Stack Overflow用户

发布于 2014-10-03 15:00:09

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

你可以:

1)修改集合后退出循环

2)通过在集合中追加.ToList()来迭代集合的副本

3)使用for循环手动迭代自己。请注意,您必须理解修改集合将如何与您的迭代器/索引变量交互。如果您不小心,可以将索引从范围异常中提取出来,或者跳过您从未想过的元素。

票数 1
EN

Stack Overflow用户

发布于 2014-10-03 14:57:07

当您在foreach循环中迭代同一集合时,不能从集合中移除项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26181308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档