使用PropertyInfo类反射获取类 的类型
2011-04-01 17:54
190 查看
使用PropertyInfo类反射获取类 的类型
首先构造一个泛型类public class ClassName<T>
{
}
然后定义一个方法 方法返回集合
view plaincopy to clipboardprint?
public class Class1<T>
{
public IList<T> GetData(SqlDataReader reader)
{
IList<T> list = new List<T>();
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
while (reader.Read())
{
T t = Activator.CreateInstance<T>();
for (int i = 0; i < properties.Length; i++)
{
properties[i].SetValue(t, reader[i + 1], null);
}
list.Add(t);
}
return list;
}
}
public class Class1<T>
{
public IList<T> GetData(SqlDataReader reader)
{
IList<T> list = new List<T>();
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
while (reader.Read())
{
T t = Activator.CreateInstance<T>();
for (int i = 0; i < properties.Length; i++)
{
properties[i].SetValue(t, reader[i + 1], null);
}
list.Add(t);
}
return list;
}
}
上面给出了核心代码 如果你要传递sql语句
那你的业务逻辑层 就要这一个方法也就够了!
下面一个扩展方法 由 论坛的sql1234提供 在一次感叹 linq语法的简洁
view plaincopy to clipboardprint?
public static IEnumerable<T> GetObjects<T>(this DbDataReader rd) where T : new()
{
var fs = (from fd in typeof(T).GetFields()
let desc = new { field = fd, index = rd.GetOrdinal(fd.Name) }
where desc.index >= 0
select desc)
.ToList();
foreach (var x in rd)
{
var obj = new T();
fs.ForEach(d => { d.field.SetValue(obj, rd[d.index]); });
yield return obj;
}
}
public static IEnumerable<T> GetObjects<T>(this DbDataReader rd) where T : new()
{
var fs = (from fd in typeof(T).GetFields()
let desc = new { field = fd, index = rd.GetOrdinal(fd.Name) }
where desc.index >= 0
select desc)
.ToList();
foreach (var x in rd)
{
var obj = new T();
fs.ForEach(d => { d.field.SetValue(obj, rd[d.index]); });
yield return obj;
}
}
这里,我们通过扩展方法,为任意DbDataReader都增加了一个GetObjects方法,返回任意指定类型的强类型的对象集合。
如果包括private的field才更完整。应该将 GetFields() 修改为
GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic)
相关文章推荐
- 如何使用反射技术获取泛型类的真实类型?
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- [原创]让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- 使用反射获取泛型类型
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .
- [原创]让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- 使用反射获取类型参数的真实类型
- 如何使用反射技术获取泛型类的真实类型?
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .
- 使用反射获取当前new的对象的 带泛型的父类的 类型
- 使用反射技术获取指定类型中方法的完整信息
- 如何使用反射技术获取泛型类的真实类型?
- java基础-反射2(反射,反射操作对象,Class对象的使用,类型信息的获取)
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- java利用反射获取类的属性及类型
- 泛型约束where条件的使用(通过类型参数动态反射创建实例)
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 反射中使用值类型与引用类型的参数的区别
- SQL Server 数据库获取表名,字段名,与字段类型语句。方便导出到Excel中使用。
- Android中获取正在运行的服务:ActivityManager.RunningServiceInfo的使用