C#反射——模仿BeanUtil属性复制
反射工具类请参见:https://www.cnblogs.com/threadj/p/10535796.html
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Reflection;namespace ReligionServer.util {public class BeanUtil {/// <summary>/// 两个对象的相同属性复制, 会将Source中与Target属性名相同的属性赋值(且属性类型相同), target中别的属性值不会被破坏/// </summary>/// <param name="source"></param>/// <param name="target"></param>/// <returns></returns>public static Object PropCopy(Object source, Object target) {//在后来的修改之后, 返回List, 且包含当前类和除开Object的所有父类的属性//List<FieldInfo> sourceFields = ReflectionUtil.GetFileldS(source.GetType());//List<FieldInfo> targetFields = ReflectionUtil.GetFileldS(target.GetType());foreach (FieldInfo sourceItem in ReflectionUtil.GetFileldS(source.GetType())) {foreach (FieldInfo targetItem in ReflectionUtil.GetFileldS(target.GetType())) {if (sourceItem.Name.Equals(targetItem.Name) && sourceItem.FieldType.Equals(targetItem.FieldType)) {//targetItem.SetValue(target, sourceItem.GetValue(source).ToString().Trim());//可能出现空指针, 字段的类型也应该保持一致, 所以不应该ToString 和 Trim targetItem.SetValue(target, sourceItem.GetValue(source));break;}}}return target;}/// <summary>/// 两个对象的相同属性复制, 会将Source中与Target属性名相同的属性赋值(且属性类型相同), target中别的属性值不会被破坏/// 如果属性值相同的则不进行复制, withOutNull参数为true, 那么source中为null或者为""的属性则不复制,/// 暂时没有测试/// </summary>/// <param name="source"></param>/// <param name="target"></param>/// <param name="withOutNull"></param>/// <returns></returns>public static Object PropCopyWithOutSame(Object source, Object target, bool withOutNull) {//在后来的修改之后, 返回List, 且包含当前类和除开Object的所有父类的属性//List<FieldInfo> sourceFields = ReflectionUtil.GetFileldS(source.GetType());//List<FieldInfo> targetFields = ReflectionUtil.GetFileldS(target.GetType());foreach (FieldInfo sourceItem in ReflectionUtil.GetFileldS(source.GetType())) {foreach (FieldInfo targetItem in ReflectionUtil.GetFileldS(target.GetType())) {if (sourceItem.Name.Equals(targetItem.Name) && sourceItem.FieldType.Equals(targetItem.FieldType)) {//targetItem.SetValue(target, sourceItem.GetValue(source).ToString().Trim());//可能出现空指针, 字段的类型也应该保持一致, 所以不应该ToString 和 Trimif (sourceItem.GetValue(source) != targetItem.GetValue(target)) {//这里判断相等不能使用Equals, 因为很有可能出现空指针异常if (withOutNull) {bool flag = IsEmpty(sourceItem.FieldType, sourceItem.GetValue(source));if (!flag) {targetItem.SetValue(target, sourceItem.GetValue(source));}} else {targetItem.SetValue(target, sourceItem.GetValue(source));}break;}}}}return target;}public static bool IsEmpty(Type type, Object value) {bool flag = true;if (type.Equals(typeof(DateTime))) {flag = value == null;} else if (type.Equals(typeof(MongoDB.Bson.BsonValue))) {flag = MongoDB.Bson.BsonValue.Create(value) == null;} else if (type.Equals(typeof(String))) {flag = CommonUtil.IsEmpty(Convert.ToString(value));} else {flag = value == null;}return flag;}} }
转载于:https://www.cnblogs.com/threadj/p/10535839.html
C#反射——模仿BeanUtil属性复制相关推荐
- 通过反射创建私有化构造的类,并为私有化属性复制。调用私有化方法
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- 通过反射为对象属性赋值
/// <summary>/// 通过反射为对象属性赋值/// </summary>/// <typeparam name="T">类型参数&l ...
- Java实现两个不同泛型集合之间的属性复制
写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...
- java对象的类型转换_Java对象的类型转换和属性复制
1. 问题的源由 在J2EE项目开发中,会涉及很多领域模型对象,例如, VO (View Object) 视图对象,也叫展示对象,用于前端页面渲染所需要的数据 DTO (Data Transfer O ...
- java bean 对象属性复制框架BeanMapping-release_0.0.2-注解支持
BeanMapping 为了更加灵活的指定映射方式,0.0.2 版本引入了 @BeanMapping 注解. 注解的定义 注解定义在 bean-mapping-api 模块中,bean-mapping ...
- java 操作属性值_java反射机制根据属性名获取属性值的操作
一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...
- C# 使用反射获取私有属性的方法
本文告诉大家多个不同的方法使用反射获得私有属性,最后通过测试性能发现所有的方法的性能都差不多 在开始之前先添加一个测试的类 public class Foo{private string F { se ...
- Android 9无法通过反射获取系统属性
Android 9.0之后获取无法通过反射获取系统属性,如果我们需要知道手机某个属性,可以通过以下的方式.注意:这种方式不能获取所有的属性.不然谷歌限制SystemProper的访问就没有意义了. p ...
- java高级反射(一),通过反射批量修改属性值set,get方法 Field,对属性值进行统一操作
通过反射批量修改属性值set,get方法 Field 需求说明:对接一个系统,对方系统要求每个字段value值加密,加密方法为WebAppAESUtil.encrypt,做之前就想做一个对属性统一操作 ...
最新文章
- 关于linux安装前规划分区二三事
- requests.exceptions.SSLError: hostname '127.0.0.1' doesn't match None
- Windows内核新手上路1——挂钩SSDT
- jmeter测试java代码
- inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五
- vb 字符串替换_学习VB编程第69天 字符串查找与替换
- 数控铣削图案及编程_数控铣削简单图案编程
- jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化
- python3 规则引擎_几个常见规则引擎的简单介绍和演示
- vue从入门到精通之基础篇(三)生命周期
- GRPC与.net core
- python合并csv文件_Python学习——pandas 合并csv文件
- FreeRTOS任务延时函数
- “在格力干到退休,这套房就给你了!”董明珠称将投放3700套人才房…
- 李彦宏告诫年轻人:向前看两年
- CSDN统计出错:一天访问量竟然有48798
- 34个有用的 JavaScript 库,现在就可以用起来
- Java中--XX和XX的区别
- 软件定义和硬件重构知多少(三)
- Doom3引擎初始化分析
热门文章
- html绘制流程图飞线,基于jsplumb绘制流程图
- solarflare低延迟网卡_动态丨赛灵思收购solarflare,数据优先是重要布局
- Python Logging.basicConfig
- linux iptables
- sorted(iterable[, key][, reverse])
- 中国数据中心行业深度分析
- 优秀员工和普通员工的十大区别,老板和员工都应该知道
- XEON® Scalable-如何为虚拟化挑选合适的CPU
- Mysql学习总结(65)——项目实战中常用SQL实践总结
- JavaScript学习总结(3)——JavaScript函数(function)