ToArray,CopyTo,List (IEnumerable collection)

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。

相关文章: