gpt4 book ai didi

c# - 当枚举期间元素可能被删除时枚举集合的最佳方法

转载 作者:行者123 更新时间:2023-12-02 01:19:16 25 4
gpt4 key购买 nike

有一些类对象的典型集合,例如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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com