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

VB.NET List(Of T)按索引移除元素时抛出OutOfRangeException问题求解

问题原因

  1. Append方法误用是核心诱因
    List(Of T)的Append是.NET提供的LINQ扩展方法,不会修改原列表对象,只会返回一个包含追加元素的新IEnumerable序列。你调用cc1List.Append(cc1TempObject)后没有将返回值赋值回cc1List,这部分元素根本没有存入你使用的列表对象中,导致列表实际长度远小于你手动维护的CWBListMaxIndex,循环到超过实际长度的索引时就会触发OutOfRangeException。
  2. 循环上限依赖手动维护变量不可靠
    手动维护的CWBListMaxIndex很容易和列表实际长度出现偏差,直接用列表自带的Count属性计算循环上限能完全规避这类问题。

解决方案

最优方案:调用原生删除方法

你不需要自己写循环构建临时列表,List(Of T)自带RemoveAt方法,一行代码即可实现指定索引元素删除:

cc1List.RemoveAt(IndexToRemove)

如果你需要保留自定义循环逻辑的修正写法

Dim cc1ListTemp As New List(Of cc1)
' 直接用列表实际长度计算上限,不要用手动维护的变量
For i = 0 To cc1List.Count - 1
    If i <> IndexToRemove Then
        cc1ListTemp.Add(cc1List(i))
    End If
Next
cc1List = cc1ListTemp

后续添加元素的注意事项

统一用Add方法添加元素即可,Add是List的原生方法,会直接修改原列表内容:

' 正确写法,直接修改原列表
cc1List.Add(cc1TempObject)

' 如果你一定要用Append,必须赋值回原列表才会生效
cc1List = cc1List.Append(cc1TempObject).ToList()

内容的提问来源于stack exchange,提问作者1lsvks5w2l

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:39:02