【发布时间】:2014-09-18 11:50:08
【问题描述】:
当我将数据添加到 List,然后将该列表附加到另一个列表,然后在原始列表上使用 List.Clear() 时,它会清空所有内容,并且不会保留已附加的列表。
这是我所说的一个例子。假设我制作了 2 个这样的列表:
List<int> list = new List<int>();
List<List<int>> list2 = new List<List<int>>();
for(int i=0;i<10;i++){
for(int i2=0;i2<10;i2++){
list.Add(i2);
}
list2.Add(list);
list.Clear();
}
当我运行 list.Clear() 时,它会清除我已经附加到 list2 的所有预先存在的列表
我知道一种解决方法是像这样重新排列代码:
List<List<int>> list2 = new List<List<int>>();
for(int i=0;i<10;i++){
List<int> list = new List<int>(); //<- moved inside the for
for(int i2=0;i2<10;i2++){
list.Add(i2);
}
list2.Add(list);
}
但这是正常的行为吗?是否可以保留预先附加的列表?
【问题讨论】:
-
好像你想复制列表。您可以轻松地使用
.ToList()创建具有相同元素的新列表。 -
好吧,我不想复制列表,每次都有不同的数据。我的例子只是试图解释这种情况
-
实际上,不要这样做
list.Clear(),因为无论如何您每次迭代都会创建一个新列表。那你为什么要清除当前的? -
@YoryeNathan 在第二个代码块中创建一个新列表,但我想避免这条路线。在第一个代码块中,它不是创建一个新列表,而是添加到同一个列表中,然后清除它。
-
list2是列表的列表。当您list2.Add(list)时,您正在向list2的内容添加list的引用。无论您如何访问它,随后对list所做的任何更改都将显而易见,例如通过list或list2[0]查看它。