今天写程序的时候用到泛型集合,先前定义了一个泛型集合List<FilesInfo> filesList_A=new List<FilesInfo>()里面的FilesInfo是我记录的一些关于文件的信息。
    如果我想再创建一个泛型集合的话,List<FilesInfo> filesList_B=new List<FilesInfo>()如果对B集合赋filesList_B=filesList_A的话,将A集合清空,filesList_A.Clear(),由于泛型集合是引用类型所以B集合也会被清空,那么如果我想在A集合清空之前将A中的数据全部赋给B的话,是否只能通过遍历的办法也就是foreach(FilesInfo file in filesList_A)
{ filesList_B.Add(file); } 。有没有其他的办法呢?谢谢大家,主要考虑到效率的问题。

解决方案 »

  1.   

    FilesInfo是类,因此赋值的话也是 引用的赋值. managed heap上的东西并不动
    List<FilesInfo> filesList_B=new List<FilesInfo>()
    filesList_B=filesList_A
    后,filesList_B和filesList_A都指向一个List<FilesInfo>对象。List<FilesInfo> filesList_B=new List<FilesInfo>()
    foreach(FilesInfo file in filesList_A)
    { filesList_B.Add(file); }
    后,filesList_B和filesList_A指向不动的List<FilesInfo>对象。但是List<FilesInfo>中的Item都各自指向同同样的FilesInfo对象。也就是filesList_B[0]和filesList_A[0]指向同一个对象,依次类推。这样的赋值只是针对引用,并不是将整个FilesInfo对象进行复制,因此 对效率影响并不大。
      

  2.   


    这跟 T 类型是不是类没有关系,如果是 List<int> 一样会这样。
    // 如果真要这么做,但是有不想麻烦的话,就直接使用 ToList 方法,
    List<int> a = new List<int> { 1, 2, 3, 4 };
    List<int> b = a.ToList();
    a.Clear();
    Console.WriteLine(b.Count);