C#通过反射实现两个对象相同属性值的复制

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Security.Permissions;
 5 using System.Data;
 6 using MySql.Data;
 7 using System.Configuration;
 8 using System.IO;
 9 using System.Text;
10 using System.Reflection;
11 using MySql.Data.MySqlClient;
12 using System.Runtime.Serialization;
13 using System.Runtime.Serialization.Formatters.Binary;
14
15
16 namespace WebApplication1.Common
17 {
18     public static class ConvertUtil
19     {
21         /// <summary>
22         ///23         /// 将Tsource类中的属性拷贝到T中
24         /// </summary>
25         /// <typeparam name="T">拷贝目标实体类</typeparam>
26         /// <typeparam name="Tsource">源实体类</typeparam>
27         /// <param name="source"></param>
28         /// <returns></returns>
29         public static T ShallowCopy<T, Tsource>(Tsource source)
30         {
31             T t = Activator.CreateInstance<T>();
32             try
33             {
34                 var sourceType = source.GetType();//获得类型
35                 var Typed = typeof(T);
36                 foreach (PropertyInfo sp in Typed.GetProperties())//获得类型的属性字段
37                 {
38                     var sValue = sourceType.GetProperty(sp.Name); // 找到源实体类的属性信息
44                     if (sValue != null)
45                     {
46                         sp.SetValue(t, sValue.GetValue(source, null), null);
47                     }
48                 }
49             }
50             catch (Exception ex)
51             {
52                 throw ex;
53             }
54             return t;
55         }
56
57         /// <summary>
58         ///59         /// 将Tsource类中的属性用深拷贝到T中
60         /// </summary>
61         /// <typeparam name="T">拷贝目标实体类</typeparam>
62         /// <typeparam name="Tsource">源实体类</typeparam>
63         /// <param name="source"></param>
64         /// <returns></returns>
65         public static T DeepCopy<T, Tsource>(Tsource source)
66         {
67             //TODO  采用序列化的方式进行深拷贝
68
82             return default(T);
83         }
84
85     }
86 }

原文地址:https://www.cnblogs.com/MacrossFT/p/9652706.html

时间: 2024-10-17 12:34:49

C#通过反射实现两个对象相同属性值的复制的相关文章

利用反射机制,对对象的属性值进行自动设置

import java.lang.reflect.Method; /** * 对象的属性值自动设置,利用反射机制 */ public class AutoSet { /** * 将源对象的属性值赋值到目标对象,属性名一致,且源对象有get方法,目标对象有set方法 * @param src 源对象 * @param target 目标对象 * @return 赋值后的目标对象 */ public static Object autoGetterAndSetter(Object src, Obje

Java中对比两个对象中属性值[反射、注解]

在Java中通常要比较两个对象在修改前与修改后的值是否相同,一般我们采用的是反射技术获取对象的get方法[或其他的方法]获取值并做比较.如果系统将修改的属性名称也显示出来,这样就能更直观的显示类中的哪一个属性的值被修改了.然后Java中只能获取属性的名称,也就是英文标识的属性名,但是一般我们都会在属性后面添加属性的注释,但是Java不提供注释获取的方法.所以我们只能使用另外一种方式来将属性和属性注释关联起来,这就是Java中的@Annotation. public static  Map<Str

【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; import java.lang.reflect.Field; import java.util.*; /** * @ClassName Test * @Description 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 * @Author sxd

通过反射判断对象的属性值是否为空

问题产生场景? 在项目开发过程中我采用了表单内部嵌套列表的形式提交数据,将表单于列表数据同时提交保存.   有时候管理人的出资人结构我新增了多条  这时候并没有真正的保存到数据库,而是保存在了页面前端临时保存等待真正的提交  我操作删除 这时候删除实现的方式是 function delFundManage(obj){ $(obj).parent().parent().remove();} 移除了 但是在创建列表的时候 进行移除第一个 arr[1]  这里并没有将修改为arr[0] 这里提交到后台

java反射获取对象的属性值和对象属性中的子属性值

近段时间在做web项目,前端使用的是jQuery EasyUI. 为方便需要,准备做一个前端通用的Datagird导出Excel功能,博主也考虑过思路和最终功能,1.前端选中行导出:2.当前页导出:3.当前过滤条件导出. 想偷懒在网上找找已有的代码改改,发现大部分只能满足个别需求,使用JS导出只能满足前端,使用代码才能实现3功能. ...... 好了,说了一堆废话,回归正题,本文是在做通用自定义字段导出时所需要,根据属性名去查找对象和子对象,找到对应属性值,抓取回来放到Excel中. 直接上代码

使用Java对两个对象的属性进行拷贝

最近和Java的反射打交道比较多一点,可能是因为自己以后的方向是架构师的缘故吧,他们主要搞业务.我能也就搞架构,整天画一些流程图. 虽然对于只有一年实习经验的我,不知道这样是否好,但是我还是那句话,不论好坏,先走着,毕竟也能学到很多东西,而且还可以锻炼自己的思维能力. 表达能力,因为自己的产品做的再好,你就是表达不出来,说不出来优势,那么你就败了. 先创建一个实体类User package com.mine.practice.copyproperty.entity; /** * * @autho

JS判断两个对象是否键值对应相等

//isEqual:判断两个对象是否键值对应相等 function isEqual(a,b){ //如果a和b本来就全等 if(a===b){ //判断是否为0和-0 return a !== 0 || 1/a ===1/b; } //判断是否为null和undefined if(a==null||b==null){ return a===b; } //接下来判断a和b的数据类型 var classNameA=toString.call(a), classNameB=toString.call(

java 反射实现不同对象相同属性值复制

1.此方法会过滤final字段 2.此方法会过滤对象字段 3.此方法会兼容同对象之间.不同对象之间属性值复制 package com.bin.design.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; import java.util.List; import com.bin.des

JQuery 操作对象的属性值

通过JQuery去操作前台对象(div,span...)的属性是很常见的事情,本文就简单的介绍几种操作情形. 1):通过属性值去获取对象 2):用JQuery去修改对象的属性值 3):获取并修改对象的Style的属性值 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src=&quo