问题的症结是 IClone(?) 这个接口定义的不严谨,有人把它实现为深拷贝,有人把实现为潜拷贝。因此有专家建议尽量避免使用该接口,遇到类似需要,自己根据需要,自己动手。说实话,即便你按如上说的用 foreach “深拷贝”了可能还是不行。有没有想过 foreach(object obj in list1)
{
list2.add(obj);
} 这里的 obj 依旧可能是引用类型,当我们 list1[0].something = 'something' 时, list2[0].something 也跟着改了。只不过避免了你进行 list1.Insert、list1.Remove等操作给 list2 带来影响而已。
看你的实际需求了。如果你只是想两个数组进行隔离,大概 foreach 一下就可以了;如果是想这两个数组以及元素之间绝对隔离,估计这个就很难办了,至少要费很大劲。
这里使用了ArryList 的Clone()方法
可以啊,一切正常
代码: 经过测试,大家可以试下 我更改了list2里的一个值,list里相对会位置的值保持了原值没有变化
Code
protected void Button6_Click(object sender, EventArgs e)
{
int length = 10;
System.Collections.ArrayList list = new System.Collections.ArrayList();
for (int i = 0; i < length; i++)
{
list.Add(i.ToString());
}
System.Collections.ArrayList list2 = new System.Collections.ArrayList();
list2 = (System.Collections.ArrayList)list.Clone();
list2[5] = "新加的内容";
for (int i = 0; i < list.Count; i++)
{
Response.Write(list[i].ToString());
}
Response.Write("</br>");
for (int i = 0; i < list2.Count; i++)
{
Response.Write(list2[i].ToString());
}
}