2010-08-11 2 views
2

У меня проблема с отражением, динамическими вызывающими объектами и считыванием значений коллекции.
В Реферировано COM/Interop это будет выглядеть следующим образом:Reflection PropertyInfo.GetValue from Collection

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

Unfortunetly мне нужно сделать это с отражением и динамическим вызывающим объектом. Получение коллекции довольно просто, но чтение «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() я получаю свойство элемента (System.Object) (который невидим/не существует в обозревателе объектов)

+1

Это вопрос .NET, а не вопрос C# –

+0

Вы пытаетесь получить значение вызова метода? Вы пытаетесь получить значение указанного свойства? – McKay

+0

Я думаю, вы пытаетесь получить доступ к индексу для объекта? это [строка blah] ? – McKay

ответ

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»). –

Смежные вопросы