c# - 遍历列表时从列表中删除元素时出现问题

标签 c# loops foreach

我有一个循环遍历列表中的元素。我需要根据某些条件从循环中的这个列表中删除元素。当我尝试在 C# 中执行此操作时,出现异常。显然,不允许从正在迭代的列表中删除元素。使用 foreach 循环观察到该问题。有什么标准的方法可以解决这个问题吗?

注意:我能想到的一种解决方案是仅出于迭代目的创建列表的副本,并在循环内从原始列表中删除元素。我正在寻找一种更好的方法来处理这个问题。

最佳答案

使用 List<T>ToArray()方法在这种情况下有很大帮助:

List<MyClass> items = new List<MyClass>();
foreach (MyClass item in items.ToArray())
{
    if (/* condition */) items.Remove(item);
}

另一种方法是使用 for 循环而不是 foreach,但是当你删除一个元素时你必须递减索引变量,即

List<MyClass> items = new List<MyClass>();
for (int i = 0; i < items.Count; i++)
{
    if (/* condition */)
    {
        items.RemoveAt(i);
        i--;
    }
}

关于c# - 遍历列表时从列表中删除元素时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545731/

相关文章:

c# - 如何用一种方法处理两个datagridviews错误?

c - 在 C 上避免此错误的正确方法是什么

java - 我试图循环对象数组以返回匹配的索引

javascript - 根据变量值附加不同的数据

c# - 使用 foreach 遍历通用列表

c# - 构建代码以允许多个开发人员更新构造函数的最佳方法是什么

c# - 序列化在 ScriptEngine session 中创建的类型

c# - 创建用户后如何登录

c++ - O(1) 恒定时间解决方案示例?

javascript - Angular JS 中的 For Each 循环