如果我'覆盖''带有' new'的列表列表,是旧的删除?

时间:2014-08-14 08:07:15

标签: c# list

我想在C#中重新初始化List - 基本上擦除它并再次填充它。

如果我通过使用new关键字分配给它再次初始化列表,那么旧的关键字仍然悬在某处或者我是否已成功覆盖它?

3 个答案:

答案 0 :(得分:6)

  

如果我通过使用new关键字分配给它再次初始化列表,那么旧的关键字仍然悬在某处或者我是否已成功覆盖它?

旧的将会闲置一段时间,直到垃圾收集器出现 当然,前提是您没有在其他地方存储对List的引用。

您只能覆盖指向List的引用变量,而不是List本身。

更重要的是:总的来说,这是正确的做法。只需在需要时创建一个新的对象/列表,不要担心(麻烦)旧状态等。

答案 1 :(得分:1)

如果没有对该列表的其他引用,则垃圾收集器将删除该列表。 请记住,如果您有2个引用同一列表的变量,则为1个变量分配一个新列表,但另一个仍然指向原始列表。

答案 2 :(得分:1)

您描述的是您想要做什么,以及您如何描述您想要做的事情并不匹配。

如果您想保留List<T>对象并将其擦除,则可以使用Clear方法:

myList.Clear();

这将删除列表中的所有项目,但您保留相同的实例。它还将具有相同的容量,即保留用于保存项目的基础数组。

如果您使用new关键字,则会创建一个新实例。例如:

myList = new List<int>();

对新实例的引用将替换对前一个实例的引用。除非有另一个对该实例的引用,否则它将用于垃圾收集。垃圾收集器下次运行时,可能会删除前一个实例。

但不能保证。如果列表已经存在了很长时间,它可能已经被移动到第二代或第三代堆,在这种情况下它将保留在内存中,直到垃圾收集器决定进行多于第一代堆的集合。