提问人:Osmy09 提问时间:11/10/2023 最后编辑:FilburtOsmy09 更新时间:11/10/2023 访问量:47
List 未处理的异常列表 C# [已关闭]
List of a List unhandled exception C# [closed]
问:
有人可以解释一下为什么如果我在临时变量已经存储在 ResList 中后使用 Clear() 方法。我收到未经处理的异常。
我尝试使用“临时”列表来填充结果列表,但是在我使用 Clear 方法重用“临时”列表后,我尝试在结果列表中获取以前存储的列表之一,我得到了“未处理的错误”
这是解释他们问题的代码:
class Program
{
static void Main(string[] args)
{
IList<int> temp = new List<int>();
IList<IList<int>> resList = new List<IList<int>>();
temp.Add(0);
temp.Add(1);
resList.Add(temp);
temp.Clear();
Console.WriteLine("testVar[1][1]{0}", resList[0][1]);
}
}
答:
3赞
jmcilhinney
11/10/2023
#1
您似乎不了解对象和引用的工作原理。执行此操作时:
resList.Add(temp);
您没有以某种方式将项目从 复制到 .您实际上是在将对自身的引用添加到 中。 现在引用同一个对象,因此您通过一个引用所做的任何更改都将反映在另一个引用中。这就像你姐姐戴上了一顶红帽子,妈的女儿戴着一顶红帽子应该不会感到惊讶。这只是引用同一事物的两种方式。您可以自己看到这一点,因为是.这意味着,并且实际上正在执行完全相同的事情,因此您不应该能够通过任一引用从该列表中获取项目。temp
resList
temp
resList
resList[0]
temp
resList[0] == temp
true
temp.Clear()
resList[0].Clear()
评论
resList
IndexOutOfRangeException