父子类型转换

 /// <summary>
        /// 自动映射父类数据到子类
        /// </summary>
        /// <typeparam name="TParent"></typeparam>
        /// <typeparam name="TChild"></typeparam>
        /// <param name="parent"></param>
        /// <returns></returns>
        public static TChild AutoMapper<TParent, TChild>(TParent parent) where TChild : TParent, new()
        {
            TChild child = new TChild();
            Type ParentType = typeof(TParent);
            var Properties = ParentType.GetRuntimeProperties();
            foreach (PropertyInfo Propertie in Properties)
            {
                //循环遍历属性
                if (Propertie.CanRead && Propertie.CanWrite)
                {
                    //进行属性拷贝
                    Propertie.SetValue(child, Propertie.GetValue(parent, null), null);
                }
            }
            return child;
        }

        /// <summary>
        /// 没有继承约束,但是有共同属性,剪除部分属性后可视为目标属性
        /// </summary>
        /// <typeparam name="TParent"></typeparam>
        /// <param name="me"></param>
        /// <returns></returns>
        public static TParent TryToParent<TParent>(this object me) where TParent : new()
        {
            
            TParent res = new TParent();
            Type pt = typeof(TParent);
            try
            {
                var ps = pt.GetRuntimeProperties().ToList();
                foreach (PropertyInfo p in ps)
                {
                    //循环遍历属性
                    if (p.CanRead && p.CanWrite)
                    {
                        //进行属性拷贝
                        p.SetValue(res, p.GetValue(me, null), null);
                    }
                }
                return res;
            }
            catch (Exception e)
            {
                throw new Exception($"实体转换失败,请检查属性是否一致{me?.GetType()?.Name}:{pt.Name}");
            }
        }
原文地址:https://www.cnblogs.com/zhuwansu/p/11822105.html