Отражение 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'" } );
Другие вопросы по тегам