如何反射创建泛型集合,例如Collection<T>,

348 篇文章 0 订阅

请问如何反射创建泛型集合,例如Collection<T>,谢谢.-.NET技术/C#


如题,我是想通过反射去创建一个泛型集合,并且给这个集合添加值或者赋值,其中任意一种都可以. 有如下2个类,Person类和Department类,Department类中有一个Field(public Collection<Person> personlist = new Collection<Person>()),需求是其他项目工程的函数可以动态反射Department并且为personlist添加值,即personlist.add(Person)的方法,Person类和Department放在一个项目工程中,编译之后的DLL被拷贝到其他项目中使用,并在其他项目的方法中进行反射创建实例,并且为这个泛型集合天加数据项.
代码如下:
项目工程A
namespace PersonDll
{
  public class Person
  {
  public string Name
  {
  get;
  set;
  }
  }
  public class Department
  {
  public Collection<Person> personlist = new Collection<Person>();
  }
}
---------------------------------------
项目工程B:
class Program
  {
  static void Main(string[] args)
  {
  string path = @"D:\Project\CollectionObj\RecoverCollection\SampleDll\PersonDll.dll";
  Assembly assenbly = Assembly.LoadFile(path);
  object person = assenbly.CreateInstance("PersonDll.Person");
  object deparment = assenbly.CreateInstance("PersonDll.Department");
  Type deType = assenbly.GetType("PersonDll.Department");
  FieldInfo fi = deType.GetField("personlist");
  //此后再次进行GetType()也不能获取到Add方法
  //本意是想使用集合的Add方法,类似
  //Person p = new Person();
  //p.Name = "test";
  //personlist.Add(p);
//上面的fi即类似personlist的集合
  }
  }
-------------------
现在的问题就是到FieldInfo fi = deType.GetField("personlist");这一步之后,本来是想获取到fi.GetType().GetMethods()的相关Add方法,不过不能获取到,所以无法向这个Collection集合中添加数据,所以还请各位帮忙看下有什么方法可以动态的给这个泛型集合添加数据项进去.前提是必须动态加载DLL.谢谢.
------回答---------
------其他回答(50分)---------
C# code
    
    
Assembly assenbly = Assembly.LoadFile(path); object person = assenbly.CreateInstance("PersonDll.Person"); TypeDescriptor.GetProperties(person)["Name"].SetValue(person, "张三"); object deparment = assenbly.CreateInstance("PersonDll.Department"); object personlist = deparment.GetType().GetField("personlist").GetValue(deparment); personlist.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, personlist, new object[] { person });

如果用vs2010,可以用dynamic来做会方便很多
------回答---------

------其他回答(50分)---------

C# code
    
    
Assembly assenbly = Assembly.LoadFile(path); object person = assenbly.CreateInstance("PersonDll.Person"); TypeDescriptor.GetProperties(person)["Name"].SetValue(person, "张三"); object deparment = assenbly.CreateInstance("PersonDll.Department"); object personlist = deparment.GetType().GetField("personlist").GetValue(deparment); personlist.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, personlist, new object[] { person });

如果用vs2010,可以用dynamic来做会方便很多

相关资料:

请问如何反射创建泛型集合,例如Collection<T>,谢谢.-.NET技术/C#来源网络



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值