You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在foreach循环中删除数组的当前元素?

解决foreach中删除当前数组元素的问题

直接在foreach循环里删除集合元素会触发InvalidOperationException,因为foreach依赖集合的只读迭代器,遍历过程中修改原集合会破坏迭代状态。下面给你几种可行的实现方案:

方案1:倒序for循环(适合List或数组)

如果是List<T>,可以直接通过索引删除;如果是数组,需要重新生成新数组。倒序遍历的好处是删除元素不会影响未遍历到的元素索引:

// 假设array是List<YourItemType>类型
for (int i = array.Count - 1; i >= 0; i--)
{
    bool isSuccess = method.DoSomething(); // 这里包含提交JSON到新库的逻辑,成功返回true
    if (isSuccess)
    {
        array.RemoveAt(i);
    }
}

// 如果是数组类型
for (int i = array.Length - 1; i >= 0; i--)
{
    bool isSuccess = method.DoSomething();
    if (isSuccess)
    {
        array = array.Where((_, idx) => idx != i).ToArray();
    }
}

方案2:先收集待删除元素,再批量移除

先遍历收集所有需要删除的元素,再统一从原集合中移除,避免遍历过程中修改集合:

var itemsToDelete = new List<YourItemType>();
foreach (var item in array)
{
    bool isSuccess = method.DoSomething();
    if (isSuccess)
    {
        itemsToDelete.Add(item);
    }
}

foreach (var item in itemsToDelete)
{
    array.Remove(item); // 仅适用于List<T>,数组可转List处理后再转回数组
}

方案3:用LINQ生成新集合(无修改原集合风险)

通过LINQ筛选出不需要删除的元素,生成新的集合替代原集合,这种方式更简洁:

// 假设array是数组类型,转成数组输出;如果是List就用ToList()
array = array.Where(item => 
{
    bool isSuccess = method.DoSomething();
    return !isSuccess; // 成功的元素被排除(即删除),失败的保留
}).ToArray();

注意:确保method.DoSomething()里的HTTP请求逻辑是幂等的,避免重复提交导致数据重复;同时要处理请求异常,比如网络错误时不要误删元素。

内容的提问来源于stack exchange,提问作者Steven Tumler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:15:46