C#Copy复制对象

Copy对象

引用

using System.Reflection;

        /// <summary>
        /// 获取或赋值相同属性的对象,找到T对象属性相同名称的进行赋值
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="objOrg">原对象</param>
        /// <returns></returns>
        public static T GetCopy<T>(object objOrg)
        {
            var objOrgType = objOrg.GetType();
            var objOrgProps = objOrgType.GetProperties();
            var objNew = Activator.CreateInstance<T>();
            var objNewType = objNew.GetType();
            var objNewProps = objNewType.GetProperties();
            foreach (PropertyInfo objNewP in objNewProps)
            {
                var query = objOrgProps.Where(x => x.Name == objNewP.Name);
                if (query != null && query.Count() > 0)
                {
                    try
                    {
                        var o = query.First().GetValue(objOrg, null);
                        objNewP.SetValue(objNew, o);//给传入的数据赋值
                    }
                    catch (Exception)
                    {

                        // throw;
                    }
                }
            }
            return (T)objNew;
        }

        /// <summary>
        /// 获取或赋值相同属性的对象,找到T对象属性相同名称的进行赋值
        /// </summary>
        /// <typeparam name="T">返回类型</typeparam>
        /// <param name="objOrg">原对象</param>
        /// <param name="objOrgPropertyInfo">原对象属性</param>
        /// <param name="objNewPropertyInfo">新对象属性</param>
        /// <returns></returns>
        public static T GetCopy<T>(object objOrg, PropertyInfo[] objOrgPropertyInfo, PropertyInfo[] objNewPropertyInfo)
        {
            var objOrgProps = objOrgPropertyInfo;
            var objNew = Activator.CreateInstance<T>();
            var objNewProps = objNewPropertyInfo;
            foreach (PropertyInfo objNewP in objNewProps)
            {
                var query = objOrgProps.Where(x => x.Name == objNewP.Name);
                if (query != null)
                {
                    try
                    {
                        var o = query.First().GetValue(objOrg, null);
                        objNewP.SetValue(objNew, o);//给传入的数据赋值
                    }
                    catch (Exception)
                    {

                        // throw;
                    }
                }
            }
            return (T)objNew;
        }

        /// <summary>
        /// 获取或赋值相同属性的对象,找到T对象属性相同名称的进行赋值
        /// </summary>
        /// <typeparam name="T">返回类型</typeparam>
        /// <typeparam name="T1">原对象类型</typeparam>
        /// <param name="objOrg">原对象集合</param>
        /// <returns></returns>
        public static List<T> GetCopy<T, T1>(List<T1> objOrg)
        {
            var objOrgType = objOrg.GetType();
            var objOrgProps = objOrgType.GetProperties();
            var objNew = Activator.CreateInstance<T>();
            var objNewType = objNew.GetType();
            var objNewProps = objNewType.GetProperties();
            var objNewList = new List<T>();
            foreach (var item in objOrg)
            {
                var o = GetCopy<T>(item,objOrgProps,objNewProps);
                objNewList.Add(o);
            }
            return objNewList;
        }

 

 var objOrgType = objOrg.GetType();            var objOrgProps = objOrgType.GetProperties();            var objNew = Activator.CreateInstance<T>();            var objNewType = objNew.GetType();            var objNewProps = objNewType.GetProperties();            foreach (PropertyInfo objNewP in objNewProps)            {                var query = objOrgProps.Where(x => x.Name.Equals(objNewP.Name));                if (query != null && query.Count() > 0)                {                    try                    {                        var o = query.First().GetValue(objOrg, null);                        objNewP.SetValue(objNew, o);//给传入的数据赋值                    }                    catch (Exception)                    {
                        // throw;                    }                }            }            return (T)objNew;

posted on 2021-02-18 15:52  shexunyu  阅读(1607)  评论(0编辑  收藏  举报

导航