泛型深度复制
浅度复制(Shallow Copy):对第一层的值类型的值复制和引用类型的引用复制,如果改变了起引用的值,其引用也会相应的改变。
深度复制(Deep Copy):引用类型的复制,不仅复制了引用对象,生成了新的对象,并且将原对象的值也进行了绝对复制,如果原对象中的值进行了改变,这里并不会受到影响。
对于深度复制写了泛型方法,仅供学习。。。
/// <summary>
/// 深度复制
/// </summary>
/// <typeparam name="T">实体对象</typeparam>
/// <param name="listT">复制的实体集合</param>
/// <returns></returns>
private List<T> DeepCopy<T>(List<T> listT) where T:class
{
List<T> TT = new List<T>();
foreach (var item in listT)
{
T t = System.Activator.CreateInstance<T>();
foreach (var lie in item.GetType().GetProperties().ToList())
{
var value = item.GetType().GetProperty(lie.Name).GetValue(item, null);
t.GetType().GetProperty(lie.Name).SetValue(t, value);
}
TT.Add(t);
}
return TT;
}
public static T DeepCopy<T>(T obj)
{
object retval;
using (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;
}