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;
            }
  • 相关阅读:
    通过设置iis在局域网中访问网页
    .NetCore集成Dapr踩坑经历
    Api跨域设置
    Win10安装.net2.0/3.0
    C# MVC 全局错误Application_Error中处理(包括Ajax请求)
    使用SignalR从服务端主动推送警报日志到各种终端(桌面、移动、网页)
    C#设计模式学习笔记:(4)建造者模式
    .NET CORE(C#) WPF简单菜单MVVM绑定
    值类型与引用类型的区别
    [博客美化]给你博客添加一个萌萌的看板娘吧
  • 原文地址:https://www.cnblogs.com/shexunyu/p/14412138.html
Copyright © 2011-2022 走看看