使用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)
转载于:https://www.cnblogs.com/dzone/archive/2011/04/01/2002447.html
今天的文章使用反射调用某个类的方法_通过反射获取类的方法「建议收藏」分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58810.html