忘了出处   ,这个是转别人的

public class datatolist<t> where t : new()
{
/// <summary>
/// 利用反射和泛型
/// </summary>
/// <param name=”dt”></param>
/// <returns></returns>
public static list<t> converttolist(datatable dt)
{

// 定义集合
list<t> ts = new list<t>();

// 获得此模型的类型
type type = typeof(t);
//定义一个临时变量
string tempname = string.empty;
//遍历datatable中所有的数据行
if (dt != null)
{
foreach (datarow dr in dt.rows)
{
t t = new t();
// 获得此模型的公共属性
propertyinfo[] propertys = t.gettype().getproperties();
//遍历该对象的所有属性
foreach (propertyinfo pi in propertys)
{
tempname = pi.name;//将属性名称赋值给临时变量
//检查datatable是否包含此列(列名==对象的属性名)
if (dt.columns.contains(tempname))
{
// 判断此属性是否有setter
if (!pi.canwrite) continue;//该属性不可写,直接跳出
//取值
object value = dr[tempname];
//如果非空,则赋给对象的属性
if (value != dbnull.value)
pi.setvalue(t, value, null);
}
}
//对象添加到泛型集合中
ts.add(t);
}
}
return ts;

}
}