xml地图|网站地图|网站标签 [设为首页] [加入收藏]
pandas的日常笔记,类相同属性赋值
分类:编程

做项目时偶尔B类赋值给A类,碰巧A和B类型很多属性字段名是一样的,或者只是大小写不一样,这是可以利用泛型,反射来写一个自动化赋值的方法。

图片 1

插入排序,是循环遍历一个无序数组(例如有10个元素),把遍历出来的数值(第i个元素)插入到已经排过顺序的数组(这个有序数组有10-i个元素)中。

下面方法不考虑大小写不一样的情况,如果要考虑,可以使用字符串方法 ToUpper() 、ToLower() 后,对比字段名是否一样。

图片 2

用一个 数组 举个例子:

 public class MapperModel
    {
        /// <summary>
        /// B对象相同属性赋值给A对象, 
        /// </summary>
        /// <typeparam name="A">类型A</typeparam>
        /// <typeparam name="B">类型B</typeparam>
        /// <param name="b">B对象</param>
        /// <returns>返回创建的新A对象</returns>
        public static A Mapper<A, B>(B b)
        {
            A a = Activator.CreateInstance<A>();
            try
            {
                Type Typeb = b.GetType();//获得类型  
                Type Typea = typeof(A);
                foreach (PropertyInfo bp in Typeb.GetProperties())//获得类型的属性字段  
                {
                    foreach (PropertyInfo ap in Typea.GetProperties())
                    {
                        if (ap.Name == bp.Name)//判断属性名是否相同  
                        {                          
                            if (ap.GetSetMethod()!= null)
                            {
                                if (bp.GetGetMethod()!=null)
                                {
                                    ap.SetValue(a, bp.GetValue(b, null), null);//获得b对象属性的值复制给a对象的属性   }
                                }

                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return a;
        }
    }

图片 3

初始数组:1, 89, 4, 34, 56, 40, 59, 60, 39, 1, 40, 90, 48 

值得注意的地方,属性到底有没有Get或者Set方法 ?B属性Set访问器是非公共的或不存在 则会赋值时出现异常。同理:A属性如果 Get 访问器是非公共的或不存在,则取值时出现异常

图片 4

第一次循环(i=0):1, 89, 4, 34, 56, 40, 59, 60, 39, 1, 40, 90, 48 

因此上面使用了 GetSetMethod(),GetGetMethod()做判断。如果Get 、Set 访问器不能正常获取,则返回为null。

图片 5

第二次循环(i=1):  1, 89, 4, 34, 56, 40, 59, 60, 39, 1, 40, 90, 48 

 

图片 6

第三次循环(i=2):  1, 4, 89, 34, 56, 40, 59, 60, 39, 1, 40, 90, 48 

本文由澳门新葡亰手机版发布于编程,转载请注明出处:pandas的日常笔记,类相同属性赋值

上一篇:无法确定条件表达式的类型,试图加载格式不正 下一篇:同步两张表的数据小技巧,中回滚TransactionScope的
猜你喜欢
热门排行
精彩图文