作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一些类对象的典型集合,例如string
为了简单起见
IList<string> collection = new List<string>();
在程序流程中,某些函数需要对集合进行操作,处理类对象,并根据操作结果从集合中删除已处理的类对象。
例如以下字符串示例,如果字符串“失败”,则删除该项目
foreach (string str in collection)
{
// operate on the current class object
// if str is not valid
if (str == "failed")
collection.Remove(str);
}
无论如何,这都会导致异常。循环遍历所有能够在枚举期间删除它的元素的最佳方法是什么?
最佳答案
执行索引 for 循环,但要向后执行,因为当您删除成员时,上游索引会发生更改。
例如,对于您的字符串集合示例:
for (int i = collection.Count() - 1; i >= 0; i--)
{
// do some other stuff, then ...
if (collection[i] == "failed")
collection.RemoveAt(i);
}
注意:如果您使用前向 for 循环,它一开始可能看起来有效,但它会在每次删除后跳过一个项目(因为删除后索引会重新编号)。因此,该错误的一个常见症状是,删除似乎一直有效,直到您获得两个相邻的删除。这可能是一个相当令人困惑的错误。这并不是发生在我身上*咳嗽*
关于c# - 当枚举期间元素可能被删除时枚举集合的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7160343/
我是一名优秀的程序员,十分优秀!