c#深拷贝

2021-02-19 08:19

阅读:680

标签:osi   mem   object   反序列化   obj   对象   instance   实现   []   

实现方法:
1.利用二进制序列化和反序列化实现,需要注意的时,这个方法使用了序列化,所以使用此方的对象必须是可序列化的。

public GoodItem CloneItem()
{
    MemoryStream stream = new MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(stream, this);
    stream.Position = 0;
    return formatter.Deserialize(stream) as GoodItem;
}

2.利用xml序列化和反序列化实现

public T DeepCopy(T obj)
{
    object retval;
    MemoryStream ms = new MemoryStream()
    XmlSerializer xml = new XmlSerializer(typeof(T));
    xml.Serialize(ms, obj);
    ms.Seek(0, SeekOrigin.Begin);
    retval = xml.Deserialize(ms);
    ms.Close();
    return (T)retval;
}

3.利用反射实现

public static T DeepCopy(T obj)
{
    //如果是字符串或值类型则直接返回
    if (obj is string || obj.GetType().IsValueType) return obj;

    object retval = Activator.CreateInstance(obj.GetType());
    FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
    foreach (FieldInfo field in fields)
    {
        try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
        catch { }
    }
    return (T)retval;
}

 

c#深拷贝

标签:osi   mem   object   反序列化   obj   对象   instance   实现   []   

原文地址:https://www.cnblogs.com/wang-jin-fu/p/8321314.html


评论


亲,登录后才可以留言!