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