gpt4 book ai didi

c# - 即使我正在修改不同的集合,也会出现 "Collection was modified "错误

转载 作者:行者123 更新时间:2023-11-30 15:36:59 24 4
gpt4 key购买 nike

好的,我知道我不能修改我当前正在遍历的集合,但看看下面的代码,你会发现我什至没有触及执行枚举的集合:

    MenuItemCollection tempItems = new MenuItemCollection();
foreach (MenuItem item in mainMenu.Items)
{
if (item.Value != "pen")
tempItems.Add(item);
}

如您所见,我添加项目的集合与我正在迭代的集合不同。但我仍然得到错误:

"Collection was modified; enumeration operation may not execute".

但是,如果我对代码稍作更改并将 MenuItemCollection 替换为 List,它就会起作用:

    List<MenuItem> tempItems = new List<MenuItem>();
foreach (MenuItem item in mainMenu.Items)
{
if (item.Value != "pen")
tempItems.Add(item);
}

谁能解释一下为什么?

最佳答案

当您将 MenuItem 添加到另一个 MenuItemCollection 时,它会从其所有者(即 mainMenu)中删除。因此原始集合被修改:

public void Add(MenuItem child)
{
if ((child.Owner != null) && (child.Parent == null))
child.Owner.Items.Remove(child);

if (child.Parent != null)
child.Parent.ChildItems.Remove(child);

if (this._owner != null)
{
child.SetParent(this._owner);
child.SetOwner(this._owner.Owner);
}
// etc
}

BTW 这对于 ASP.NET 和 WinForms 都是正确的。对于 WinForms,代码会略有不同。

关于c# - 即使我正在修改不同的集合,也会出现 "Collection was modified "错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13152320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com