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序列化和反序列化实现
1 2 3 4 5 6 7 8 9 10 11
public T DeepCopy<T>(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.利用反射实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14
public static T DeepCopy<T>(T obj) { //如果是字符串或值类型则直接返回 if (obj is string || obj.GetType().IsValueType) return obj;