【发布时间】:2013-06-30 17:38:26
【问题描述】:
好的,我有一个List<string[][]> myList 用于存储一组复杂的字符串。
每次需要新的分支时,我都需要将列表的所有元素添加到自身。
这就是我现在正在做的事情
for (int k = 0; k < (count); k++)
{
myList.Add(myList[k]);
}
但是当我通过 List[index].SetValue(value, index) 修改列表元素之一时
列表中该索引处的所有列表元素都会更改!
知道为什么吗?我猜这是因为myList.Add(myList[k]) 正在创建一个引用,所以基本上,我如何将它创建为一个新对象?
【问题讨论】:
-
取决于 myList 的类型。
-
抱歉,myList 是一个简单的
List<string[][]> -
添加对象的克隆而不是对列表的引用。
-
好的,我看到有一个与
List关联的MemberwiseClone()函数。它说它创建了一个浅拷贝。维基百科对 shallowcopy 的定义如下:复制对象的一种方法是shallow copy。在浅拷贝A的过程中,B会拷贝A的所有字段值。如果字段值是内存地址,则复制内存地址,如果字段值是原始类型,则复制原始类型的值。 缺点是如果你修改了 B 的一个字段指向的内存地址,你也在修改 A 的字段指向的内容 -
好吧,我想这正是我的方法所做的。因此,任何更改都会通过...传播...是否有其他克隆方法可以执行
deep copy?
标签: c# list object reference mutation