列表类型是否可以在更改时枚举?

lak*_*tak 0 c# .net-4.0 asp.net-4.5

有时在列表更改时枚举列表很有用.

例如

foreach (var item in listOfEntities)
  item.Update();

// somewhere else (with someEntity contained in listOfEntities)
// an add or remove is made:
someEntity.OnUpdate += (s,e) => listOfEntities.Remove(someEntity);
Run Code Online (Sandbox Code Playgroud)

如果listOfEntities是a,这将失败List<T>.

有一些解决方法,比如制作副本或简单的for循环,每个都有不同的缺点,但我想知道框架(或​​开源)中是否有支持这种情况的列表类型.

pho*_*oog 5

查看System.Collections.Concurrent中的集合.那里没有列表,但集合的枚举器"代表[集合]内容的时刻快照".

这些集合专为从多个线程访问而设计,因此它们更适合于您发布的代码示例等应用程序.