我想在C#中重新初始化List - 基本上擦除它并再次填充它。
如果我通过使用new关键字分配给它再次初始化列表,那么旧的关键字仍然悬在某处或者我是否已成功覆盖它?
答案 0 :(得分:6)
如果我通过使用new关键字分配给它再次初始化列表,那么旧的关键字仍然悬在某处或者我是否已成功覆盖它?
旧的将会闲置一段时间,直到垃圾收集器出现 当然,前提是您没有在其他地方存储对List的引用。
您只能覆盖指向List的引用变量,而不是List本身。
更重要的是:总的来说,这是正确的做法。只需在需要时创建一个新的对象/列表,不要担心(麻烦)旧状态等。
答案 1 :(得分:1)
如果没有对该列表的其他引用,则垃圾收集器将删除该列表。 请记住,如果您有2个引用同一列表的变量,则为1个变量分配一个新列表,但另一个仍然指向原始列表。
答案 2 :(得分:1)
您描述的是您想要做什么,以及您如何描述您想要做的事情并不匹配。
如果您想保留List<T>
对象并将其擦除,则可以使用Clear
方法:
myList.Clear();
这将删除列表中的所有项目,但您保留相同的实例。它还将具有相同的容量,即保留用于保存项目的基础数组。
如果您使用new
关键字,则会创建一个新实例。例如:
myList = new List<int>();
对新实例的引用将替换对前一个实例的引用。除非有另一个对该实例的引用,否则它将用于垃圾收集。垃圾收集器下次运行时,可能会删除前一个实例。
但不能保证。如果列表已经存在了很长时间,它可能已经被移动到第二代或第三代堆,在这种情况下它将保留在内存中,直到垃圾收集器决定进行多于第一代堆的集合。