joh*_*hnc 13 .net ienumerable design-patterns
有没有一个很好的模式允许我绕过无法删除对象,而我循环通过一个可枚举的集合(例如,字典中的IList或KeyValuePairs)
例如,以下操作失败,因为它修改了在foreach期间枚举的List
foreach (MyObject myObject in MyListOfMyObjects)
{
if (condition) MyListOfMyObjects.Remove(myObject);
}
Run Code Online (Sandbox Code Playgroud)
在过去,我使用了两种方法.
我已经用反向for循环替换了foreach(以便在我删除对象时不更改我循环的任何索引).
我还尝试存储一个新的对象集合,以便在循环中移除,然后循环遍历该集合并从原始集合中删除对象.
这些工作正常,但感觉不好,我想知道是否有人提出了更优雅的解决方案
Chr*_*isW 13
List<T>.RemoveAll(Predicate<T> match)我认为有一个有用的方法是为此设计的:http://msdn.microsoft.com/en-us/library/wdka673a.aspx
它有点简单,但当我计划从IEnumerable/IList中删除项目时,我通常只是复制一下:
foreach (MyObject myObject in new List<MyObject>(MyListOfMyObjects))
{
if (condition) MyListOfMyObjects.Remove(myObject);
}
Run Code Online (Sandbox Code Playgroud)
这不是最有效的方法,但它很容易阅读.过早优化和所有这些.
| 归档时间: |
|
| 查看次数: |
23287 次 |
| 最近记录: |