C# 实现对象浅拷贝Copy(极速复制对象)
作者:C/S框架网|www.cscode.ne  发布日期:2020/03/28 14:54:42
  C# 实现对象浅拷贝Copy(极速复制对象)

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



测试:


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




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

上一篇 下一篇