首页 新闻 会员 周边 捐助

帮忙写一段实例化的反射,谢谢

0
悬赏园豆:30 [已解决问题] 解决于 2011-07-21 11:24

一下代码没写完,写不下去了,不能执行。我想做的就是在IMSDB()构造函数中反射获取所有的成员。并实例化后把实例对象赋给他们。实现Memos,Persons,Users以及更多成员的批量实例化。

public class IMSDB : DBController
{
public DbSet<Memo> Memos { get; set; }
public DBSet<Person> Persons { get; set; }
public List<User> Users { get; set; }

public IMSDB()
{
//Persons = new DBSet<Person>();
var type = this.GetType();
//反射解析 获取成员列表
System.Reflection.PropertyInfo[] properties = type.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
if (properties.Length > 0)
{
foreach (System.Reflection.PropertyInfo item in properties)
{
Type t = item.PropertyType.GetGenericArguments()[0]; //泛型中实体的类型
object o = t.GetConstructor(new Type[0]).Invoke(new object[0]); //实例化实体类

  item.SetValue(t, o, null);
}
}
}

问题补充:

以下代码没写完,写不下去了,不能执行。我想做的就是在IMSDB()构造函数中反射获取所有的成员。并实例化后把实例对象赋给他们。实现Memos,Persons,Users以及更多成员的批量实例化。

潇客的技术博客的主页 潇客的技术博客 | 初学一级 | 园豆:20
提问于:2011-07-20 09:46
< >
分享
最佳答案
0

foreach(var pi in properties)
{
var instance
= Activator.CreateInstance(pi.PropertyType);
pi.SetValue(
this,instance,null);
}
你那个SetValue时的第一个参数应该是this,而不是t,没有完整代码,只能揣测了。

收获园豆:30
think8848 | 菜鸟二级 |园豆:374 | 2011-07-20 10:38
问题解决! 非常感谢!
潇客的技术博客 | 园豆:20 (初学一级) | 2011-07-20 20:10
你忘了点啥吧,哈哈~
think8848 | 园豆:374 (菜鸟二级) | 2011-07-21 10:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册