【代码】C#中对集合或对象的类型转换(Class A转Class B)

2023-06-21 11:34:58  阅读 4091 次 评论 0 条

直接上代码

 /// <summary>
        /// 类转类(T是接收的类型,A是传入数据的类型)
        /// 注意,不可以转换集合,转换集合请用SetListValueByListT方法
        /// 当前类用来转换实体类对象,只是属性和属性的赋值转换
        /// 只转换名字相同并且类型一致的
        /// </summary>
        /// <typeparam name="T">转换结果类型</typeparam>
        /// <typeparam name="A">要转换的类型</typeparam>
        /// <param name="GetValue">传入的参数</param>
        /// <returns>转换结果</returns>
        public static T SetValueByT<T, A>(A GetValue)
        {
            var SetValue = System.Activator.CreateInstance<T>();
            try
            {
                var TProps = SetValue.GetType().GetProperties();
                var TPropsNames = TProps.ToDictionary(i => i.Name, i => i.GetType());
                var TPropsTypes = TProps.Select(i => i.GetType()).ToList();

                var AProps = GetValue.GetType().GetProperties();

                List<PropertyInfo> Props = new List<PropertyInfo>();
                foreach (var item in AProps)
                {
                    if (TPropsNames.Keys.Contains(item.Name))
                    {
                        if (TPropsNames[item.Name] == item.GetType())
                        {
                            var Value = GetValue.GetType().GetProperty(item.Name).GetValue(GetValue);
                            SetValue.GetType().GetProperty(item.Name).SetValue(SetValue, Value);
                        }
                    }
                }
                return SetValue;
            }
            catch
            {
                return SetValue;
            }
        }

        /// <summary>
        /// 集合转换(T是接收的集合类型,A是传入数据的集合类型)
        /// 当前类用来转换实体类对象,只是属性和属性的赋值转换
        /// 只转换名字相同并且类型一致的
        /// </summary>
        /// <typeparam name="T">转换结果类型</typeparam>
        /// <typeparam name="A">要转换的类型</typeparam>
        /// <param name="GetListValue">传入的集合</param>
        /// <returns>转换结果</returns>
        public static List<T> SetListValueByListT<T, A>(List<A> GetListValue)
        {
            List<T> SetListValue = new List<T>();
            if (GetListValue.Count() > 0)
            {
                var SetDefaultValue = System.Activator.CreateInstance<T>();
                var TProps = SetDefaultValue.GetType().GetProperties();
                var TPropsNames = TProps.ToDictionary(i => i.Name, i => i.GetType());
                var TPropsTypes = TProps.Select(i => i.GetType()).ToList();
                var AProps = GetListValue.First().GetType().GetProperties();

                Dictionary<string, List<object>> list = new Dictionary<string, List<object>>();
                foreach (var item in AProps)
                {
                    if (TPropsNames.Keys.Contains(item.Name))
                    {
                        if (TPropsNames[item.Name] == item.GetType())
                        {
                            List<object> getPropList = GetListValue.Select(i => i.GetType().GetProperty(item.Name).GetValue(i)).ToList();
                            list.Add(item.Name, getPropList);
                        }
                    }
                }
                if (list.Keys.Count > 0)
                {
                    var Count = list.ElementAt(0).Value.Count;
                    for (int i = 0; i < Count; i++)
                    {
                        var NewValue = System.Activator.CreateInstance<T>();
                        foreach (var item in list)
                        {
                            NewValue.GetType().GetProperty(item.Key).SetValue(NewValue, item.Value.ElementAt(i));
                        }
                        SetListValue.Add(NewValue);
                    }
                }
            }
            return SetListValue;
        }



微信扫码查看本文
本文地址:https://www.yangguangdream.com/?id=2236
版权声明:本文为原创文章,版权归 编辑君 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?