Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# List.Add(List[index])创建新对象或引用的是什么?_C#_List_Object_Reference_Mutation - Fatal编程技术网

C# List.Add(List[index])创建新对象或引用的是什么?

C# List.Add(List[index])创建新对象或引用的是什么?,c#,list,object,reference,mutation,C#,List,Object,Reference,Mutation,好的,我有一个列表myList,用于存储一组复杂的字符串。 每次需要一个新分支时,我都需要将列表中的所有元素添加到它自己 这就是我现在正在做的 for (int k = 0; k < (count); k++) { myList.Add(myList[k]); } for(int k=0;k

好的,我有一个
列表myList
,用于存储一组复杂的字符串。 每次需要一个新分支时,我都需要将列表中的所有元素添加到它自己

这就是我现在正在做的

 for (int k = 0; k < (count); k++)
 {
     myList.Add(myList[k]);
 }
for(int k=0;k<(计数);k++)
{
添加(myList[k]);
}
但是当我通过执行
list[index].SetValue(value,index)
该索引处列表中的所有列表元素都已更改


知道为什么吗?我猜这是因为myList.Add(myList[k])正在创建一个引用,所以基本上,我如何将它创建为一个新对象?

所以这就是我最后要做的。。。如果你知道的话,请建议一个更好的方法

for (int k = 0; k < (count); k++)
 {
     myList.Add((string[][])myList[k].Clone());
 }
for(int k=0;k<(计数);k++)
{
添加((字符串[][])myList[k].Clone());
}

还有别的办法吗?不必遍历每个列表成员?

取决于myList的类型。对不起,myList是一个简单的
列表
添加对象的克隆而不是对列表的引用。好的,我看到有一个
MemberwiseClone()
函数与
list
关联。它说它创建了一个浅拷贝。wikipedia对shallowcopy的定义如下:复制对象的一种方法是
shallowcopy
。在浅层复制A的过程中,B将复制A的所有字段值。如果字段值是内存地址,则复制内存地址;如果字段值是基元类型,则复制基元类型的值。缺点是如果你修改了B的一个字段指向的内存地址,你也在修改A的字段指向toWell的内容,我想这就是我的方法所做的。所以任何改变都会通过。。。是否有其他克隆方法可以进行深度复制?
Clone
对二维阵列进行的复制太浅。您需要编写自己的克隆方法来创建新数组并将单个字符串复制到其中。或克隆第二维度中的每个1D阵列。或者从一维数组开始。