C# 对象克隆 TOut ObjectHelper.Clone<tin ,="" tout="">|C/S开发框架</tin>
使用方法
|C/S开发框架">
C# 全选
ObjectHelper.Clone<tb_MyUser, ModelUser>(result); ObjectHelper.cs
C# 全选
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CSFramework.WebApi.Utils
{
/// <summary>
/// 对象操作类
/// </summary>
public static class ObjectHelper
{
/// <summary>
/// 复制对象, 仅复制对象相同属性的值.
/// </summary>
/// <param name="source">对象实例</param>
/// <param name="ignoreCase">对象属性名称匹配忽略大小写</param>
/// <returns></returns>
public static TOut Clone<TIn, TOut>(TIn source, bool ignoreCase = true)
{
try
{
if (source == null) return default(TOut);
Type objTypeIn = typeof(TIn);
Type objTypeOut = typeof(TOut);
PropertyInfo[] propsIn = objTypeIn.GetProperties();
PropertyInfo[] propsOut = objTypeOut.GetProperties();
//返回的对象实例
TOut destObj = (TOut)objTypeOut.Assembly.CreateInstance(objTypeOut.FullName);
foreach (PropertyInfo infoSource in propsIn)
{
object value = infoSource.GetValue(source, null);
//判断相同属性名称
var pTarget = propsOut.Where(w => String.Compare(w.Name, infoSource.Name, ignoreCase) == 0).FirstOrDefault();
if (pTarget != null)
SetPropertyValue(destObj, pTarget, value);
}
return destObj;
}
catch
{
return default(TOut);
}
}
/// <summary>
/// 给对象的属性赋值
/// </summary>
/// <param name="instance">对象实例</param>
/// <param name="prop">对象实例的属性信息</param>
/// <param name="value">其他对象属性的值</param>
public static void SetPropertyValue(object instance, PropertyInfo prop, object value)
{
try
{
if (prop == null) return;
if (prop.PropertyType.IsArray)//数组类型,单独处理
{
if (value == DBNull.Value)//特殊处理DBNull类型
prop.SetValue(instance, null, null);
else
prop.SetValue(instance, value, null);
}
else
{
if (value == null || String.IsNullOrWhiteSpace(value.ToString()))//空值
value = prop.PropertyType.IsValueType ? Activator.CreateInstance(prop.PropertyType) : null;//值类型
else
value = System.ComponentModel.TypeDescriptor.GetConverter(prop.PropertyType).ConvertFromString(value.ToString());//创建对象
prop.SetValue(instance, value, null);
}
}
catch (Exception ex)
{
//报错在此跟踪
}
}
}
}
参考文档:
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)|C/S开发框架
.NETCore WebApi框架:从appsettings.json 读取参数配置|C/S开发框架
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
CSFrameworkV6.0开发指南 | 新增系统参数(sys_SystemSettings表)|C/S开发框架
C/S Winform框架开发指南 | 如何新增系统消息参数(sys_SystemSettings表)|C/S开发框架
WCF开发框架 - vs发布IIS承载(IIS Hosting)的WCF应用服务详解
String.Join和StringBuilder性能比较-C/S开发框架
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
使用Photoshop PS制作GIF动画(等待窗体GIF图标)|C/S开发框架
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)|C/S开发框架
C/S开发框架:系统数据库与账套数据库合并解决方案|C/S开发框架
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
C#.NET各版本常用语法糖大全(C#3~C#10)|C/S开发框架
EFCore+Scheme(数据库架构)实现分库分表支持多种主流数据库解决方案|C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)|C/S开发框架
.NETCore WebApi框架:从appsettings.json 读取参数配置|C/S开发框架
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
CSFrameworkV6.0开发指南 | 新增系统参数(sys_SystemSettings表)|C/S开发框架
C/S Winform框架开发指南 | 如何新增系统消息参数(sys_SystemSettings表)|C/S开发框架
WCF开发框架 - vs发布IIS承载(IIS Hosting)的WCF应用服务详解
String.Join和StringBuilder性能比较-C/S开发框架
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
使用Photoshop PS制作GIF动画(等待窗体GIF图标)|C/S开发框架
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)|C/S开发框架
C/S开发框架:系统数据库与账套数据库合并解决方案|C/S开发框架
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
C#.NET各版本常用语法糖大全(C#3~C#10)|C/S开发框架
EFCore+Scheme(数据库架构)实现分库分表支持多种主流数据库解决方案|C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
其它资料:
什么是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内容管理系统 |
在线客服
