Отражение PropertyInfo.GetValue из коллекции - PullRequest
2 голосов
/ 12 августа 2010

У меня проблема с отражением, динамическим вызовом объектов и чтением значений коллекции.
В ссылочном 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 Ответ

4 голосов
/ 12 августа 2010

Вы пробовали 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'" } );
...