/// <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

两个不相同的类之间如果赋值相关推荐

  1. 【C++】错误C2027:使用了未定义类型错误原因 两个类之间怎么相互使用成员 向前声明概念

    错误C2027:使用了未定义类型.两个类之间相互引用成员.向前声明 错误C2027:使用了未定义类型 向前声明 单独编译 两个类之间相互引用成员 通过单独编译和向前声明方法实现两个类之间相互引用成员 ...

  2. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

  3. 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系

    各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...

  4. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  5. 判断类之间的父子关系

    如何判断两个类之间的父子关系? java为我们提供了instanceof运算符,可以用来判断一个对象是否是否个类的实例,所以很容易的想到子类的对象肯定是父类的实例.但是如何所涉及到的类是不可实例化的该 ...

  6. java 类 赋值_Java实现不同的类的属性之间相互赋值

    在开发的时候可能会出现将一个类的属性值,复制给另外一个类的属性值,这在读写数据库的时候,可能会经常的遇到 ,特别是对于一个有继承关系的类的时候,我们需要重写很多多余的代码,下面有一种简单的方法实现该功 ...

  7. 类与类之间的交互关系

    类与类之间都哪些交互关系呢? UML 统一建模语言中定义了六种类之间的关系.它们分别是:泛化.实现.关联.聚合.组合.依赖.关系比较多,而且有些还比较相近,比如聚合和组合,接下来我就逐一讲解一下. 泛 ...

  8. 02 面向对象之:类空间问题以及类之间的关系

    一. 类的空间问题 1.1 何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex ...

  9. java类的两个基本成分_Java类文件的基本结构

    欢迎来到""第二期.我们讨论了抽象计算机JVM.如果你对JVM还很陌生,你可以去看看.本期,我们稍稍窥探一下Java类文件的基本结构. 为旅行而生 Java类文件(.class文件 ...

最新文章

  1. sql server 字符串转table
  2. Bitlocker and BitLocker To Go
  3. 运营总监训练营本周六开营,B612、神策数据等运营总监倾囊相授运营方法论
  4. Tornado的同步API写法举例实现GET/POST/DELETE请求+Tornado获取post请求中的json数据(转载)
  5. flask框架(十): 闪现
  6. Log4j2进阶使用(Pattern Layout详细设置)
  7. snmp有android代理端吗,Android实现snmp协议(1)
  8. libevent:信号、超时、回调
  9. php preg_split,php汉字截取函数_preg_split()
  10. ad怎么查接线_电视机维修|电视打开后黑屏怎么回事?电视打开后黑屏解决方法【图文详解】...
  11. Facebook开源新的压缩算法,性能超zlib
  12. 如何知道一个exe或者dll是用什么语言编译的
  13. UTM 投影坐标系条带号Zone与EPSG代号计算(Python 实现)
  14. linux 内核 禁止抢占,内核抢占实现(preempt)
  15. Android Nginx Retrofit+Okhttp.HTTP 504 Unsatisfiable Request (only-if-cached)
  16. 2021年金属非金属矿山(地下矿山)主要负责人模拟考试题库及金属非金属矿山(地下矿山)主要负责人复审模拟考试
  17. C中kbhit()和getch()以及gets()和getchar()的用法
  18. 记录一款绿色便携的sqlist3数据库编辑工具SQLiteSpy
  19. Excel -- 排序与排名
  20. Linux系统制作ios镜像Mondo Rescue工具安装及使用

热门文章

  1. 云话题 | 你女朋友在买买买时,程序员小哥在干嘛?
  2. 阿里云云效如何帮助企业10倍研发效能提升?
  3. 如何在不同摄像头里识别行人?多层相似度感知CNN网络解析
  4. 刚刚,阿里开源了一项重磅炸弹,终结程序员“中年危机”!
  5. php数字两位小数_PHP保留两位小数的几种方法
  6. 《糖豆人:终极淘汰赛》成功背后蕴含了何种设计?
  7. 《守望先锋》中的末日铁拳是怎么摧毁玩家体验的?
  8. 【GPU精粹与Shader编程】(一) 全系列核心知识点总览
  9. 题目:社区人员登记管理系统(有源码链接免费下载)
  10. TT 安装 之 AIX