一个将枚举类型转换成类的方法

写的不知道是否有问题,才学习C#,请指正

 

/// <summary>
							

    /// 一些通用的数据操作方法
							

    /// </summary> 

    public class ConvertHelper<T> 

        where T : new() 

    {

        /// <summary> 

        /// convert enum to list of SPMConst
							

        /// </summary> 

        /// <param name="s">must be enum type</param> 

        /// <returns></returns> 

        public static List<SPMConst> ConvertEnumToList<S>(S s) where S:struct 

        {

            List<SPMConst> list = new List<SPMConst>(); 

            foreach (int e in Enum.GetValues(typeof(S))) 

            {

                list.Add(new SPMConst(){Name=Enum.GetName(typeof(S),e), Value= e.ToString()}); 

            }

            return list;

        }

 

        #region 可能存在问题,不要使用

          

        /// <summary> 

        /// 将datatable转换成泛型List;
							

        /// </summary> 

        /// <param name="dt"></param> 

        /// <returns></returns> 

        public static List<T> ConvertToList(DataTable dt) 

        {

            //定义集合
						

            List<T> list = new List<T>(); 

 

            //获得该模型的类型,也就是T是什么类
						

            Type type = typeof(T); 

            foreach (DataRow dr in dt.Rows) 

            {

                list.Add(ConvertToEntity(dr));

            }

            return list;

        }

 

        /// <summary> 

        /// 将行转换成泛型T,要求列的字段名和属性名称一致(表中的字段可以少于类中的属性数量,但名称要相同)
							

        /// </summary> 

        /// <param name="dr"></param> 

        /// <returns></returns> 

        public static T ConvertToEntity(DataRow dr) 

        {

            T t = new T();

            string tmpName = string.Empty; 

            //获取模型的公共属性
						

            PropertyInfo[] properties = t.GetType().GetProperties();

            //遍历所有属性
						

            foreach (PropertyInfo property in properties) 

            {

                tmpName = property.Name;

                try
						

                {

                    //可能不存在该列,或者该属性只读,采用异常来解决
						

                    object value = dr[tmpName];

                    property.SetValue(t, value, null);

                }

                catch
						

                {

 

                }

            }

            return t;

        }

               

        /// <summary> 

        /// 将value 赋予给obj
							

        /// </summary> 

        /// <param name="obj">被赋值对象</param> 

        /// <param name="value">值对象</param> 

        /// <param name="properties">不需要的属性</param> 

        public static void SetObjectValue(T obj ,T value,PropertyInfo[] properties) 

        {

            //得到所有属性
						

            PropertyInfo[] objps = obj.GetType().GetProperties();

            PropertyInfo[] valueps = value.GetType().GetProperties();

 

           

            //创建一个集合,删除不需要的属性
						

            List<PropertyInfo> list = new List<PropertyInfo>(); 

            foreach(PropertyInfo p in objps) 

            {

                list.Add(p);

            }

 

            if (properties != null && properties.Count()>0) 

            { 

                //排除
						

                foreach(PropertyInfo p in valueps) 

                {

                    list.Remove(p);

                }

            }

 

            //赋值
						

            foreach (PropertyInfo p in list) 

            {

                object val = p.GetValue(value,null); 

                try
						

                {

                    if (val != null) 

                    {

                        p.SetValue(obj, val, null);

                    }

                }

                catch
						

                {

 

                }

            }

        }

 

        /// <summary> 

        /// 将value对象的值赋予给obj
							

        /// </summary> 

        /// <param name="obj"></param> 

        /// <param name="value"></param> 

        public static void SetObjectValue(T obj,T value) 

        {

            PropertyInfo[] p = new PropertyInfo[] { }; 

            SetObjectValue(obj,value,p);

        }

        #endregion
					

    }

转载于:https://www.cnblogs.com/willstier/archive/2013/05/23/3094608.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值