System.InvalidOperationException:集合已修改

2024-01-09

我在枚举队列时遇到以下异常:

系统.InvalidOperationException: 集合已修改;枚举 操作可能无法执行

这是代码摘录:

1:    private bool extractWriteActions(out List<WriteChannel> channelWrites)
2:    {
3:        channelWrites = new List<WriteChannel>();
4:        foreach (TpotAction action in tpotActionQueue)
5:        {
6:            if (action is WriteChannel)
7:            {
8:                channelWrites.Add((WriteChannel)action);
9:                lock(tpotActionQueue)
10:               {
11:                  action.Status = RecordStatus.Batched;
12:               }
13:           }
14:       }
15:       return (channelWrites.Count > 0);
16:   }

我想我理解这个问题 - 改变哈希表action.Status = RecordStatus.Batched,这会搞砸枚举器上的 MoveNext()。 问题是,我如何正确实现该“模式”?


我想我在使用时也有类似的例外foreach在一个集合上循环,我试图从集合中删除项目(或者它可能是一个列表,我不记得了)。我最终通过使用来解决它for环形。或许可以尝试如下操作:

for (int i=0; i<tpotActionQueue.Count(); i++)
{
    TpotAction action = tpotActionQueue.Dequeue();
    if (action is WriteChannel)
    {
        channelWrites.Add((WriteChannel)action);
        lock(tpotActionQueue)
        {
            action.Status = RecordStatus.Batched;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

System.InvalidOperationException:集合已修改 的相关文章

随机推荐