两个不相同的类之间如果赋值
/// <summary> /// 类属性/字段的值复制工具 /// </summary> public class ClassValueCopier{/// <summary> /// 复制 /// </summary> /// <param name="destination">目标</param> /// <param name="source">来源</param> /// <returns>成功复制的值个数</returns> public static int Copy(object destination, object source){if (destination == null || source == null){return 0;}return Copy(destination, source, source.GetType());}/// <summary> /// 复制 /// </summary> /// <param name="destination">目标</param> /// <param name="source">来源</param> /// <param name="type">复制的属性字段模板</param> /// <returns>成功复制的值个数</returns> public static int Copy(object destination, object source, Type type){return Copy(destination, source, type, null);}/// <summary> /// 复制 /// </summary> /// <param name="destination">目标</param> /// <param name="source">来源</param> /// <param name="type">复制的属性字段模板</param> /// <param name="excludeName">排除下列名称的属性不要复制</param> /// <returns>成功复制的值个数</returns> public static int Copy(object destination, object source, Type type, IEnumerable<string> excludeName){if (destination == null || source == null){ return 0; }if (excludeName == null){excludeName = new List<string>();}int i = 0;Type desType = destination.GetType();foreach (FieldInfo mi in type.GetFields()){if (excludeName.Contains(mi.Name)){ continue; }try{FieldInfo des = desType.GetField(mi.Name);if (des != null && des.FieldType == mi.FieldType){des.SetValue(destination, mi.GetValue(source)); i++;}}catch{}}foreach (PropertyInfo pi in type.GetProperties()){if (excludeName.Contains(pi.Name)){continue;}try{PropertyInfo des = desType.GetProperty(pi.Name);if (des != null && des.PropertyType == pi.PropertyType && des.CanWrite && pi.CanRead){des.SetValue(destination, pi.GetValue(source, null), null);i++;}}catch{//throw ex; }}return i;}}#region 扩展方法 For .NET 3.0+/// <summary> /// 类属性/字段的值复制工具 扩展方法 /// </summary> public static class ClassValueCopier2{/// <summary> /// 获取实体类的属性名称 /// </summary> /// <param name="source">实体类</param> /// <returns>属性名称列表</returns> public static List<string> GetPropertyNames(this object source){if (source == null){return new List<string>();}return GetPropertyNames(source.GetType());}/// <summary> /// 获取类类型的属性名称(按声明顺序) /// </summary> /// <param name="source">类类型</param> /// <returns>属性名称列表</returns> public static List<string> GetPropertyNames(this Type source){return GetPropertyNames(source, true);}/// <summary> /// 获取类类型的属性名称 /// </summary> /// <param name="source">类类型</param> /// <param name="declarationOrder">是否按声明顺序排序</param> /// <returns>属性名称列表</returns> public static List<string> GetPropertyNames(this Type source, bool declarationOrder){if (source == null){return new List<string>();}var list = source.GetProperties().AsQueryable();if (declarationOrder){list = list.OrderBy(p => p.MetadataToken);}return list.Select(o => o.Name).ToList(); ;}/// <summary> /// 从源对象赋值到当前对象 /// </summary> /// <param name="destination">当前对象</param> /// <param name="source">源对象</param> /// <returns>成功复制的值个数</returns> public static int CopyValueFrom(this object destination, object source){return CopyValueFrom(destination, source, null);}/// <summary> /// 从源对象赋值到当前对象 /// </summary> /// <param name="destination">当前对象</param> /// <param name="source">源对象</param> /// <param name="excludeName">排除下列名称的属性不要复制</param> /// <returns>成功复制的值个数</returns> public static int CopyValueFrom(this object destination, object source, IEnumerable<string> excludeName){if (destination == null || source == null){return 0;}return ClassValueCopier.Copy(destination, source, source.GetType(), excludeName);}/// <summary> /// 从当前对象赋值到目标对象 /// </summary> /// <param name="source">当前对象</param> /// <param name="destination">目标对象</param> /// <returns>成功复制的值个数</returns> public static int CopyValueTo(this object source, object destination){return CopyValueTo(destination, source, null);}/// <summary> /// 从当前对象赋值到目标对象 /// </summary> /// <param name="source">当前对象</param> /// <param name="destination">目标对象</param> /// <param name="excludeName">排除下列名称的属性不要复制</param> /// <returns>成功复制的值个数</returns> public static int CopyValueTo(this object source, object destination, IEnumerable<string> excludeName){if (destination == null || source == null){return 0;}return ClassValueCopier.Copy(destination, source, source.GetType(), excludeName);}}#endregion
转载于:https://www.cnblogs.com/dandan00056/p/11425687.html
两个不相同的类之间如果赋值相关推荐
- 【C++】错误C2027:使用了未定义类型错误原因 两个类之间怎么相互使用成员 向前声明概念
错误C2027:使用了未定义类型.两个类之间相互引用成员.向前声明 错误C2027:使用了未定义类型 向前声明 单独编译 两个类之间相互引用成员 通过单独编译和向前声明方法实现两个类之间相互引用成员 ...
- Day-16 面向对象03 类与类之间的关系
一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...
- 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系
各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...
- c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...
- 判断类之间的父子关系
如何判断两个类之间的父子关系? java为我们提供了instanceof运算符,可以用来判断一个对象是否是否个类的实例,所以很容易的想到子类的对象肯定是父类的实例.但是如何所涉及到的类是不可实例化的该 ...
- java 类 赋值_Java实现不同的类的属性之间相互赋值
在开发的时候可能会出现将一个类的属性值,复制给另外一个类的属性值,这在读写数据库的时候,可能会经常的遇到 ,特别是对于一个有继承关系的类的时候,我们需要重写很多多余的代码,下面有一种简单的方法实现该功 ...
- 类与类之间的交互关系
类与类之间都哪些交互关系呢? UML 统一建模语言中定义了六种类之间的关系.它们分别是:泛化.实现.关联.聚合.组合.依赖.关系比较多,而且有些还比较相近,比如聚合和组合,接下来我就逐一讲解一下. 泛 ...
- 02 面向对象之:类空间问题以及类之间的关系
一. 类的空间问题 1.1 何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex ...
- java类的两个基本成分_Java类文件的基本结构
欢迎来到""第二期.我们讨论了抽象计算机JVM.如果你对JVM还很陌生,你可以去看看.本期,我们稍稍窥探一下Java类文件的基本结构. 为旅行而生 Java类文件(.class文件 ...
最新文章
- sql server 字符串转table
- Bitlocker and BitLocker To Go
- 运营总监训练营本周六开营,B612、神策数据等运营总监倾囊相授运营方法论
- Tornado的同步API写法举例实现GET/POST/DELETE请求+Tornado获取post请求中的json数据(转载)
- flask框架(十): 闪现
- Log4j2进阶使用(Pattern Layout详细设置)
- snmp有android代理端吗,Android实现snmp协议(1)
- libevent:信号、超时、回调
- php preg_split,php汉字截取函数_preg_split()
- ad怎么查接线_电视机维修|电视打开后黑屏怎么回事?电视打开后黑屏解决方法【图文详解】...
- Facebook开源新的压缩算法,性能超zlib
- 如何知道一个exe或者dll是用什么语言编译的
- UTM 投影坐标系条带号Zone与EPSG代号计算(Python 实现)
- linux 内核 禁止抢占,内核抢占实现(preempt)
- Android Nginx Retrofit+Okhttp.HTTP 504 Unsatisfiable Request (only-if-cached)
- 2021年金属非金属矿山(地下矿山)主要负责人模拟考试题库及金属非金属矿山(地下矿山)主要负责人复审模拟考试
- C中kbhit()和getch()以及gets()和getchar()的用法
- 记录一款绿色便携的sqlist3数据库编辑工具SQLiteSpy
- Excel -- 排序与排名
- Linux系统制作ios镜像Mondo Rescue工具安装及使用