C# 清除列表与将新列表分配给现有变量

cod*_*oob 4 c# list

我正在学习 C#。

如果我首先创建一个变量来保存列表。

List<int> mylist = new List<int>();
Run Code Online (Sandbox Code Playgroud)

假设我对列表做了一些工作,现在我想清除列表以将其用于其他用途。所以我执行以下操作之一:

方法一:

mylist.Clear();
Run Code Online (Sandbox Code Playgroud)

方法二:

mylist = new List<int>();
Run Code Online (Sandbox Code Playgroud)

目的只是清空列表中的所有值以重用列表。

使用方法2有副作用吗?我应该更喜欢一种方法而不是另一种方法吗?


我还发现了一个类似的问题, 使用“清晰”方法与新对象, 我会让其他读者决定什么最适合他们自己的用例。所以我不会选择正确的答案。

小智 7

使用方法 2 可能会导致程序出现意外行为,具体取决于您使用列表的方式。

如果你要做类似的事情:

List<int> myList = new List<int> { 1, 2, 3 };

someObj.listData = myList;

myList = new List<int>(); // clearing the list.
Run Code Online (Sandbox Code Playgroud)

“someObj”中的数据仍然是 1,2,3。

但是,如果您执行 myList.clear() ,那么“someObj”中的数据也会被清除。

我刚刚还有一个想法。如果您对原始列表有悬空引用,并使用 new 重新分配变量以清除它,则 GC 将永远不会清理该内存。我想说,如果您需要清空列表的内容,那么使用 .clear() 方法总是更安全。