我将非常感谢任何帮助。我有一个字符串作为输入。我们称之为'table_name'。我想创建一个table_names的集合(其中table_name是被引用项目中的实际对象)。我做了以下内容:C#获取Generic对象的成员
Object obj = Activator.CreateInstance("ClassLibrary", "ClassLibrary." + table_name);
Type CollectionType = typeof(Collection<>).MakeGenericType(new[] { obj.GetType() });
ICollection c = (ICollection)Activator.CreateInstance(CollectionType);
然后我打电话的方法(它位于不同的项目,并且返回一个对象的集合),填补了我的ICollection对象(在这种情况下,C):
object[] parameters = new object[] { x_coord, y_coord, buffer_dist};
c = (ICollection)sde_db.GetType().GetMethod("Method" + table_name).Invoke(sde_db, parameters);
到目前为止一切正常。我可以看到集合中元素的数量。但问题是,当我尝试遍历集合时,它不显示其元素。我只能在运行时看到它们。有没有办法在编译期间检索集合的成员?我想要类似:
for(int i = 0; i < c.Count; i++){
label.Text = c[i].Details;
}
谢谢!
是否有某些原因导致您无法正常声明集合?这看起来像是一个非常迂回的做法。 – Magus
编译器不知道它们在编译时键入的是什么,运行时决定它。如果你在编译时知道,你不需要做这些反射。 –
您定位的是C#的哪个版本? C#4.0和5.0具有动态对象。 – diegog