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

如何在C#中使用传统foreach循环替换List指定索引的元素?

问题分析与解决

错误原因

  1. 索引越界:List的索引从0开始,你的集合有3个元素,最大有效索引是2。当i == totalLenngth(也就是i=3)时,执行mylist.RemoveAt(i),传入的索引3超出了集合的有效范围,直接触发索引越界错误。
  2. foreach循环中修改集合:foreach依赖集合的枚举器,在遍历过程中对集合进行RemoveAt或Add操作会导致枚举器失效,即使索引正确,也会抛出InvalidOperationException。

正确实现方式

如果你是想替换最后一个元素为"Val4",根本不需要删除再添加,直接通过索引赋值即可:

List<string> mylist = new List<string>();
mylist.Add("Val1");
mylist.Add("Val2");
mylist.Add("Val3");

// 直接替换最后一个元素
if (mylist.Count > 0)
{
    mylist[mylist.Count - 1] = "Val4";
}

如果确实需要在遍历中修改集合(比如动态调整元素),改用for循环(从后往前遍历避免索引偏移):

List<string> mylist = new List<string>();
mylist.Add("Val1");
mylist.Add("Val2");
mylist.Add("Val3");

// 从后往前遍历,避免删除元素后索引错乱
for (int i = mylist.Count - 1; i >= 0; i--)
{
    if (i == mylist.Count - 1) // 定位最后一个元素
    {
        mylist.RemoveAt(i);
        mylist.Add("Val4");
    }
}

额外提示

  • List的索引始终从0开始,访问元素时确保索引范围是0 <= 索引 < mylist.Count。
  • 遍历集合时,如果需要修改集合结构(增删元素),优先使用for循环而非foreach。

内容的提问来源于stack exchange,提问作者Muhammad Bilal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:42:14