我將非常感謝任何幫助。我有一個字符串作爲輸入。我們稱之爲'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