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

标签 c# list

我正在学习 C#。

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

List<int> mylist = new List<int>();

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

方法一:
mylist.Clear();

方法二:
mylist = new List<int>();

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

使用method2有什么副作用吗?我是否应该偏爱一种方法而不是另一种方法。

我也发现了一个类似的问题,
Using the "clear" method vs. New Object
我会让其他读者决定什么最适合他们自己的用例。所以我不会选择正确的答案。

最佳答案

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

如果您要执行以下操作:

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

someObj.listData = myList;

myList = new List<int>(); // clearing the list.

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

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

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

关于c# 清除列表与将新列表分配给现有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54135574/

相关文章:

c# - 在 C# 中将 14 数字转换为 DateTime

r - 计算从 R 中的列表元素中选择的特定行的数据框列的平均值

python - 在Python中组合n个不同列表中的相应元素

c# - 我如何获得 RadGridView 列总和?

c# - 具有通用类型约束和继承类型的通用类定义?

Python 从字典中的值绘制图表

c++ - 下标值不是数组(错误)

java - Java 中可搜索的对象列表

c# - LINQ to SQL - 从 Var 获取字符串

c# - 使用相同端点/ Controller 的多个实体类型