List 未处理的异常列表 C# [已关闭]

List of a List unhandled exception C# [closed]

提问人:Osmy09 提问时间:11/10/2023 最后编辑:FilburtOsmy09 更新时间:11/10/2023 访问量:47

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

14天前关闭。

有人可以解释一下为什么如果我在临时变量已经存储在 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]);
    }
}
C# 列表

评论

3赞 ProgrammingLlama 11/10/2023
因为您已经清除了该列表,所以该列表也作为 ?如果您包含异常文本,您的问题会更好,尽管我希望它是.resListIndexOutOfRangeException
4赞 jmcilhinney 11/10/2023
如果您清除了一个列表,那么您期望如何获得该列表中的第二项?

答:

3赞 jmcilhinney 11/10/2023 #1

您似乎不了解对象和引用的工作原理。执行此操作时:

resList.Add(temp);

您没有以某种方式将项目从 复制到 .您实际上是在将对自身的引用添加到 中。 现在引用同一个对象,因此您通过一个引用所做的任何更改都将反映在另一个引用中。这就像你姐姐戴上了一顶红帽子,妈的女儿戴着一顶红帽子应该不会感到惊讶。这只是引用同一事物的两种方式。您可以自己看到这一点,因为是.这意味着,并且实际上正在执行完全相同的事情,因此您不应该能够通过任一引用从该列表中获取项目。tempresListtempresListresList[0]tempresList[0] == temptruetemp.Clear()resList[0].Clear()