"收集被修改......"问题

Tyl*_*rry 2 c# collections exception

我有一个函数来检查对象列表,看看它们是否被点击并相应地触发OnClick事件.我相信功能正常,但是我遇到了问题:

当我挂钩其中一个OnClick事件并删除并将该元素插入列表中的不同位置(此程序的典型功能)时,我收到"Collection was modified ..."错误.

我相信我明白发生了什么:

  • 该函数循环访问每个对象,在必要时触发OnClick事件
  • 触发一个事件,对象根据钩子函数更改列表中的位置
  • 在迭代它时修改集合会抛出异常

我的问题是,如何让我允许函数遍历所有对象,在适当的时间触发必要的事件,并仍然让用户可以选择操作对象在列表中的位置?

tc.*_*tc. 7

这类问题有两种通用的解决方案:

  • 复制一份清单.迭代副本.
  • 列出需要进行的更改.完成迭代后应用更改.

如果要将进行更改的代码与执行循环的代码分离,则"使用索引"选项听起来不合适.