在按顺序阅读时防止收集修改

时间:2012-09-10 00:03:11

标签: c# .net collections xna

我正在处理大量对象及其顺序读取。 我发现这些行中的大多数问题都涉及多线程,但我更关注线程本身由于滥用可分发库而导致的错误。

库中的系统管理可能较大的对象集合,在某一点上,它执行此集合的顺序读取,对每个元素执行操作。 根据可以在库外扩展的元素实现,对象可能会尝试从集合中删除自己。

我希望这是一个选项,但如果在顺序读取集合时发生这种情况,则可能导致错误。我希望能够在读取时锁定集合的内容,并在顺序读取完成后按计划执行任何删除请求。 删除请求必须通过系统,因为对象没有对集合的公共访问权限,我可以使用isReading标志,但我想知道是否有更优雅的结构。

C#或.NET是否提供了执行此操作的工具?也许是为了锁定列表内容,以便在顺序读取期间拦截删除请求?或者我是否必须从头开始为这种情况实施该行为?

2 个答案:

答案 0 :(得分:1)

您可能希望在.NET 2.0 +中使用SynchronizedCollection<T>类。

或者,看一下这个问题的答案:What is the difference between SynchronizedCollection<T> and the other concurrent collections?

答案 1 :(得分:0)

您可以使用下一个技巧

List<T> collection;

for(int index = collection; index >= 0; --index)
{
  var item = collection[index];

  if(MUST BE DELETED)
  {
    collection.RemoveAt(index); // this is faster
    OR
    collection.Remove(item);
  }
}

此代码在修改集合时不会崩溃,并将处理集合的每个项目