C# 实现对象浅拷贝Copy(极速复制对象)


C# Code:
/// <summary>
/// 对象浅Copy(极速复制对象)
/// </summary>
/// <typeparam name="TIn"></typeparam>
/// <typeparam name="TOut"></typeparam>
public static class CSFrameworkClone<TIn, TOut>
{
private static readonly Func<TIn, TOut> cache = GetFunc();
private static Func<TIn, TOut> GetFunc()
{
ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p");
List<MemberBinding> memberBindingList = new List<MemberBinding>();
foreach (var item in typeof(TOut).GetProperties())
{
if (!item.CanWrite)
continue;
MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));
MemberBinding memberBinding = Expression.Bind(item, property);
memberBindingList.Add(memberBinding);
}
MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());
Expression<Func<TIn, TOut>> lambda = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, new ParameterExpression[] { parameterExpression });
return lambda.Compile();
}
/// <summary>
/// 克隆对象
/// </summary>
/// <param name="tIn"></param>
/// <returns></returns>
public static TOut CloneSimple(TIn tIn)
{
return cache(tIn);
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 对象浅Copy(极速复制对象)
/// </summary>
/// <typeparam name="TIn"></typeparam>
/// <typeparam name="TOut"></typeparam>
public static class CSFrameworkClone<TIn, TOut>
{
private static readonly Func<TIn, TOut> cache = GetFunc();
private static Func<TIn, TOut> GetFunc()
{
ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p");
List<MemberBinding> memberBindingList = new List<MemberBinding>();
foreach (var item in typeof(TOut).GetProperties())
{
if (!item.CanWrite)
continue;
MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));
MemberBinding memberBinding = Expression.Bind(item, property);
memberBindingList.Add(memberBinding);
}
MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());
Expression<Func<TIn, TOut>> lambda = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, new ParameterExpression[] { parameterExpression });
return lambda.Compile();
}
/// <summary>
/// 克隆对象
/// </summary>
/// <param name="tIn"></param>
/// <returns></returns>
public static TOut CloneSimple(TIn tIn)
{
return cache(tIn);
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
测试:
C# Code:
//测试克隆单个对象,浅拷贝
DemoData.MySupplier supplier = new DemoData.MySupplier
{
Code = "S001",
Name = "供应商01",
Tel = "0808-88889999",
CreateTime = DateTime.Now,
Level = 100
};
DemoData.MySupplier clone = CSFrameworkClone<DemoData.MySupplier, DemoData.MySupplier>.CloneSimple(supplier);
//来源:C/S框架网 | www.csframework.com | QQ:23404761
DemoData.MySupplier supplier = new DemoData.MySupplier
{
Code = "S001",
Name = "供应商01",
Tel = "0808-88889999",
CreateTime = DateTime.Now,
Level = 100
};
DemoData.MySupplier clone = CSFrameworkClone<DemoData.MySupplier, DemoData.MySupplier>.CloneSimple(supplier);
//来源:C/S框架网 | www.csframework.com | QQ:23404761

扫一扫加微信


版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网