willstier

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

写的不知道是否有问题,才学习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
					

    }

posted on 2013-05-23 12:13  willstier  阅读(477)  评论(0编辑  收藏  举报