2010-08-11 77 views
2

我有反射,動態調用對象和讀取集合值的問題。
中引用COM /互操作就應該是這樣的:反射PropertyInfo.GetValue從集合

ICollection collection = (ICollection)sth.getCollection("parameter"); 
SomeObject obj = (SomeObject)collection["id='1'"]; //DB WHERE condition 

偏偏我需要反省和動態調用對象做出來。獲取收藏相當容易,但閱讀「obj」是不同的故事。我應該如何寫這個?

object oICollection = sthGetCollectionMethod.Invoke(
    sthInstance, BindingFlags.Instance | BindingFlags.Public, null, 
    new object[1] { "parameter" }, 
    System.Globalization.CultureInfo.InvariantCulture); 
//and here is the problem: 
//how to access object as array/hashtable collection? 
object obj = tICollection.GetProperty("???").GetValue(oICollection, ???); 

我要補充一點,在對象瀏覽器中我看到「此[對象v]」,但在ICollection.GetMethods()我越來越屬性Item(System.Object)(這是在對象瀏覽器不可見/不存在)

+1

這是一個.NET問題,而不是C#問題 – 2010-08-11 20:11:48

+0

您是否試圖獲取調用方法的值?你是否想要獲取指定屬性的值? – McKay 2010-08-11 20:20:18

+0

我認爲你正試圖訪問該對象的索引器? This [string blah] ? – McKay 2010-08-11 20:27:00

回答

4

你試過get_Item嗎?

object oICollection = sthGetCollectionMethod.Invoke(
    sthInstance, BindingFlags.Instance | BindingFlags.Public, null, 
    new object[1] { "parameter" }, 
    System.Globalization.CultureInfo.InvariantCulture); 

object obj = tICollection.GetMethod("get_Item").Invoke(
    oICollection, new object[] { "id='1'" }); 
+0

應該接近。或GetProperty(「Item」)。 – 2010-08-11 20:27:37