Отражение PropertyInfo.GetValue из коллекции
У меня проблема с отражением, динамическим вызовом объектов и чтением значений коллекции.
В ссылочной COM/Interop это будет выглядеть так:
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, ???);
Я должен добавить, что в браузере объектов я вижу "this[v object]", но в ICollection.GetMethods()
Я получаю свойство Item (System.Object
) (который невидим / отсутствует в браузере объектов)
1 ответ
Решение
Ты пытался 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'" } );