深拷贝浅拷贝通用类
public static class HelperTools
{
/// <summary>
/// 序列化深拷贝
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static T SerializableClone<T>(T t)
{
if (!typeof(T).IsSerializable)
{
throw new ArgumentException("The type must be serializable", t.GetType().ToString());
}
if (Object.ReferenceEquals(t, null))
{
return default(T);
}
IFormatter formatter = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
formatter.Serialize(ms, t);
ms.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(ms);
}
}
/// <summary>
/// 反射属性浅拷贝
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static T PropertyClone<T>(T t)
{
if (Object.ReferenceEquals(t, null))
{
return default(T);
}
Type type = typeof(T);
PropertyInfo[] propertyInfos = type.GetProperties();
Object obj = Activator.CreateInstance<T>();
Object p = type.InvokeMember("", BindingFlags.CreateInstance, null, t, null);
foreach (PropertyInfo propertyInfo in propertyInfos)
{
if (propertyInfo.CanRead)
{
object value = propertyInfo.GetValue(t, null);
propertyInfo.SetValue(obj, value, null);
}
}
return (T)obj;
}
}
`