作者WayneHong (韦恩)
看板C_Sharp
标题[问题] (已解决) 阵列复制问题List<class>
时间Thu Nov 12 17:03:01 2020
後来去NuGet上面找还真有
顺便跟大家分享一下
GitHub网址:
https://github.com/ReubenBond/DeepCopy
一行 DeepCopier.Copy() 就完成了
而且授权是MIT,商用也可以喔~
/********************************/
大家好,小弟遇如标题的问题
就是如何更有效的复制阵列
假如情况如下:
class Student
{
public int ID = 0;
public string Name = "";
}
List<Student> List_1 = new List<Student>();
然後List_1里面装了若干个Student
我要把 List_1 完整复制出来
且复制出来的阵列内容物不要用到相同记忆体位址
目前作法是这样:
List<Student> List_2 = new List<Student>();
foreach(Student OldStudent in List_1)
{
Student NewStudent = new Student();
NewStudent.ID = OldStudent;
NewStudent.Name = OldStudent;
List_2.Add(NewStudent);
}
总之就是new一个新的Student物件
重新赋值给它再加入新的阵列
这个方法实测有用
但问题来了
如果Student里面又有别的List装其他物件
然後那个List里面的物件又有List装其他物件....
以此类推,就是出现巢状结构
变成我只要逢List就要开新的回圈重新new物件赋值
这样感觉工程太浩大了
所以想问看看有没有更快的方法?
.网路上查到
List_1.ForEach(i =>List_2.Add(i)) 或
List<Student>List_2 = new List<Student>(List_1);
试过没有用,记忆体位置照样是共用的
.目前的状况不能使用Struct
谢谢各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.51.152.16 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1605171783.A.223.html
2F:→ Nilife: 写递回? 11/12 18:32
3F:→ t64141: deep clone 11/13 01:33
4F:推 mark0708: 针对class写一个deep copy ... 11/15 19:08
谢谢楼上各位的回答,deep copy正是我需要的
只是我原本以为C#会有现成的function可以呼叫(懒惰
※ 编辑: WayneHong (118.163.80.132 台湾), 11/17/2020 12:22:10
5F:推 noworneverev: NuGet找一下应该有现成的可以用 11/20 17:12
7F:→ eeccoo: 利用序列化方式加上扩充方法,可以简单用连接中做法完成 12/09 16:31
※ 编辑: WayneHong (118.163.110.206 台湾), 12/10/2020 18:07:12