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

C#中存入temp至ResList后调用Clear()引发未处理异常的原因?

问题原因及解决方案

问题根源

C#里的List<T>是引用类型,不是值类型。当你执行resList.Add(temp)时,并没有把temp里的元素复制一份存到resList里,而是把temp这个列表对象的内存引用(地址)存了进去。这就意味着:

  • resList里的第一个元素(resList[0])和你定义的temp变量,指向的是同一个内存中的列表对象。

当你调用temp.Clear()时,实际上是清空了这个共享的列表对象,resList里的那个元素自然也跟着变成了空列表。这时候你去访问resList[0][1],空列表根本没有索引1的元素,直接触发索引越界异常。

解决办法

有两种常见的修复方式:

1. 添加时复制新列表

每次往resList里加的时候,创建一个新的List来复制temp的元素,断开引用关联:

// 替换原resList.Add(temp)为下面这句
resList.Add(new List<int>(temp));

这样resList里存的是独立的新列表,后续操作temp不会影响已经存入resList的内容。

2. 复用前重新实例化temp

不要用Clear(),而是直接让temp指向一个新的List对象:

// 替换temp.Clear()为下面这句
temp = new List<int>();

这样原来的列表对象还留在resList里,temp变成了新的空列表,两者互不影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:14:52