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

  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框架网|原创作品.质量保障.竭诚为您服务

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

评论内容
昵称:
关联文章

C# 实现对象拷贝Copy(复制对象)
C# 克隆对象复制对象拷贝)、复制对象相同属性的值
C#中实现对象的深拷贝(Deep Copy)
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
软件开发与设计 - EMS-电子商城系统-网店系统 v2.0正式版数据库表结构
DevExpress GridControl实现右键弹出菜单复制单元格
动态对象ExpandoObject实现动态函数调用
详述IComparer,IComparable接口,实现自定义方法比较对象大小并排序(C#)
扩展按钮功能 - 扩展一个【复制单据】按钮操作详解
C#面向对象设计(OOP)之对象多态(Polymorphic)
异步实现Socket Server&Client
用户管理表格右键弹出菜单:修改密码,复制权限,锁定用户|C/S框架网
谈系统框架与开发模式 [转]
C# DataGridView组件自动添加弹出菜单(ContextMenuStrip)复制单元格的值
SOAP 简单对象访问协议
C# 跟踪对象的所有事件触发
C#.Net版本自动更新程序及3种策略实现
无线监控系统之二-------C#实现
C#接口中多态的实现
开发框架复制权限(复制角色、组)功能