zoukankan      html  css  js  c++  java
  • 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)
                    {
                        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;
            }
  • 相关阅读:
    [Agc029D]Grid game_贪心
    [Agc029C]Lexicographic constraints_进制_二分答案_贪心
    [Agc029B]Powers of two_贪心_树形dp
    [Agc029A]Irreversible operation_逆序对
    [LuoguP1074]靶形数独_搜索
    umi react处理接口请求慢的问题
    typescript-类型
    bizcharts画图遇到的几个问题
    webpack 热更新原理
    webpack配置
  • 原文地址:https://www.cnblogs.com/shexunyu/p/14412138.html
Copyright © 2011-2022 走看看