C#阻止Collection被修改的异常

Tot*_*oto 10 c# collections enumeration

是否

 foreach(T value in new List<T>(oldList) )
Run Code Online (Sandbox Code Playgroud)

当oldList包含1百万个对象T时危险(代价高昂)?

更常见的是,在枚举期间添加/删除元素时,枚举oldList的最佳方法是什么?

Sac*_*hag 8

一般规则是,您不应修改您枚举的同一集合.如果你想做类似的事情,请保留另一个集合,该集合将跟踪从原始集合中添加/删除的元素,然后在退出循环后,对原始集合执行添加/删除操作.


Dir*_*eek 4

我通常只是为所有要删除或添加的对象创建一个列表。

在 中,foreach我只需将项目添加到适当的集合中,并在foreach完成后修改原始集合(循环遍历removeItemsaddItems集合)