比如:.Count()
System.IndexOutOfRangeException: 索引超出了数组界限。
在 System.Collections.Generic.List`1.Enumerator.MoveNext()
在 System.Linq.Enumerable.CountTSource
比如:.Find()
System.IndexOutOfRangeException: 索引超出了数组界限。
在 System.Collections.Generic.List1.Find(Predicate
1 match)
比如:.Where()
System.InvalidOperationException: 集合已修改;可能无法执行枚举操作。
在 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
在 System.Collections.Generic.List`1.Enumerator.MoveNextRare()
在 System.Linq.Enumerable.WhereListIterator`1.MoveNext()
但是F12进去没有这种异常的说明,比如Count()的
只有
// 异常:
// T:System.ArgumentNullException:
// source 或 predicate 为 null。
//
// T:System.OverflowException:
// source 中的元素数量大于 System.Int32.MaxValue。
检查代码,"索引超出了数组界限"是因为返回的列表为空
你一边修改迭代器,一边读取不出错就怪了。简单粗暴点对你最合适 —— 整个操作lock起来。
重点
读取和修改你要分开来
首先这是你做多线程并发造成的。多个地方同时操作了集合。
修改方法就是在使用集合时读写分离或复制映射。也可以用数组索引的方式调用。