日期:2014-05-17  浏览次数:20968 次

[求助]如何实现LIST对象的深拷贝,LIST中的元素是引用变量
如题
List<T> PersonA = new List<T>();
List<T> PersonB;

T是一个类,也就是引用变量,实现了ICloneable接口。
现在想把PersonA的内容拷贝到PersonB中,请教各位大大如何实现。

我自己想了个办法,就是写一个Copy()函数,把PersonA的元素一个个取出来,挨个复制,再一个个Add到PersonB里面去。然后用
PersonB = Copy(PersonA);
的方法来实现。

但是感觉这样不够酷
最好是能在类中添加或重载一个方法,实现像
PersonB = PersonA.Clone();
这样的形式。

不知道大大们有啥好方法没?
此题分多,题傻,求大大们速来指教哈:P
LIST?深拷贝

------解决方案--------------------
public static List<T> Clone<T>(this List<T> list)
        {
//遍历clone
}
------解决方案--------------------
将你的业务逻辑封装成扩展方法即可

 
------解决方案--------------------
  1  [Serializable]
    public class Poco
    {
    }
  
  2  public static T DeepClone<T>(T obj)
        {
            using (var ms = new MemoryStream())
            {
                var formatter = new BinaryFormatter();
                formatter.Serialize(ms, obj);
                ms.Position = 0;

                return (T) formatter.Deserialize(ms);
            }
        }
 
------解决方案--------------------
你可以给你的对象定义一个拷贝构造函数:
class MyClass
{
    public int ID { get; set; }
    public string Name { get; set; }
    ...
    public MyClass(MyClass instance)
    {
        ID = instance.ID;
        Name = instance.Name;
        ...
    }
}
使用

List<MyClass> list1 = ...
List<MyClass> list2 = list1.Select(x => new MClass(x)).ToList();