我在枚举队列时遇到以下异常:
系统.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(使用前将#替换为@)