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
/// 对象浅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

参考文档:
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
Oracle:EFCore使用OracleBulkCopy实现批量导入数据|C/S开发框架
SqlBulkCopy.WriteToServer报错:“Unable to cast object of type 'System.Guid' to type 'System.String'.”
C#使用SqlBulkCopy快速导入Excel文件(xls/xlsx)-C/S开发框架
C# SqlBulkCopy通用数据同步程序|跨数据库导入数据
BUG: dalUser.CopyPermission方法
C#中实现对象的深拷贝(Deep Copy)
CSFrameworkV6旗舰版 | 多语言及国际化|C/S开发框架
达梦数据库.NETCore.NET8实践指南|C/S软件开发框架|C/S开发框架
DevExpress XtraReport 开发指南|单表报表设计详解(C#)|C/S开发框架
CSFrameworkV6旗舰版 | 导入导出Excel文件数据开发教程|C/S开发框架
.NET代码生成器V6.1 - 快速生成Winform窗体代码
CSFrameworkV6旗舰版 | 单表基础资料窗体完整C#源码|C/S开发框架
CSFrameworkV6旗舰版 | 业务单据复制功能,支持复制多级明细表|C/S开发框架
CSFrameworkV6旗舰版 - 业务单据复制功能,支持复制多级明细表
CSFrameworkV6-导出Excel模版、导入数据设计
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
Oracle:EFCore使用OracleBulkCopy实现批量导入数据|C/S开发框架
SqlBulkCopy.WriteToServer报错:“Unable to cast object of type 'System.Guid' to type 'System.String'.”
C#使用SqlBulkCopy快速导入Excel文件(xls/xlsx)-C/S开发框架
C# SqlBulkCopy通用数据同步程序|跨数据库导入数据
BUG: dalUser.CopyPermission方法
C#中实现对象的深拷贝(Deep Copy)
CSFrameworkV6旗舰版 | 多语言及国际化|C/S开发框架
达梦数据库.NETCore.NET8实践指南|C/S软件开发框架|C/S开发框架
DevExpress XtraReport 开发指南|单表报表设计详解(C#)|C/S开发框架
CSFrameworkV6旗舰版 | 导入导出Excel文件数据开发教程|C/S开发框架
.NET代码生成器V6.1 - 快速生成Winform窗体代码
CSFrameworkV6旗舰版 | 单表基础资料窗体完整C#源码|C/S开发框架
CSFrameworkV6旗舰版 | 业务单据复制功能,支持复制多级明细表|C/S开发框架
CSFrameworkV6旗舰版 - 业务单据复制功能,支持复制多级明细表
CSFrameworkV6-导出Excel模版、导入数据设计
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
