public class Stu
{
public string Name{get;set;}
}
void Main()
{
List<Stu> list=new List<Stu>();
list.Add(new Stu{Name="bert"});
list.Add(new Stu{Name="david"});
Stu[] r=new Stu[2];
list.CopyTo(r);
//Stu[] r=list.ToArray();
list[0].Name="mike";
//r[0].Name="mike";
list.Dump();
r.Dump();
}
List (IEnumerable<T> collection):
void Main()
{
Stu[] r=new Stu[2];
r[0]=new Stu{Name="bert"};
r[1]=new Stu{Name="david"};
List<Stu> list=new List<Stu>(r);
list[0].Name="mike";
list.Dump();
r.Dump();
}
结论:
如果集合中存储的是引用对象,ToArray与CopyTo方法产生的数组指向同样的对象。如果修改lsit[0]或者r[0],两个集合都会受到影响。
对于集合密集型的运算尤其要注意这些方法。比如ToArray, CopyTo, Clone等等。默认都是Shallow copy。