• 两个不相同的类之间如果赋值


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

      

  • 相关阅读:
    多线程编程(6) 从 CreateThread 说起[续四]
    多线程编程(7) 从 CreateThread 说起[续五]
    我最喜欢的邮件客户端软件IncrediMail Xe
    [公告]博客园建立了“专家区”
    [新功能]文章档案
    Lucene.Net的语言处理包中Lucene.Net.Analysis.Cn的Bug
    [好消息]博客园与博文视点、第二书店合作推出“读书心得区”
    推荐一篇有关GC的文章
    [小技巧]在NTFS分区中复制文件的同时如何复制权限
    ShartPoin无法创建门户网站的问题
  • 原文地址:https://www.cnblogs.com/dandan00056/p/11425687.html
Copyright © 2020-2023  润新知