Информация об изменениях

Сообщение Возможно ли одним методом получить Generic-поле разных типов от 22.01.2016 17:42

Изменено 22.01.2016 17:42 LWhisper

Есть Generic-тип, например List<T>.
Есть несколько объектов: List<Int32>, List<Object>, List<String>
Возможно ли сгенерировать общий метод на основе определения List<>, который бы получал значение вложенного Generic-поля, например T[] _items;

То есть что-нибудь наподобие:
delegate Array GetItems(Object obj);

GetItems getItems = EmitGetItems(typeof(List<>));
Array arr1 = getItems(new List<Int32>{1, 2, 5});
Array arr2 = getItems(new List<Object>(null, "String", new List<Int32>());
Array arr3 = getItems(new List<String>("Str1", "Str2");


Reflection.GetValue, к примеру, такого не умеет, если ты пытаешься вытащить поле, дескриптор которого помечен, как IsGenericParameter. Но, может быть, это можно сделать при помощи IL'а?
Возможно ли одним методом получить Generic-поле разных типов
Есть Generic-тип, например List<T>.
Есть несколько объектов: List<Int32>, List<Object>, List<String>
Возможно ли сгенерировать общий метод на основе определения List<>, который бы получал значение вложенного Generic-поля, например T[] _items;

То есть что-нибудь наподобие:
delegate Array GetItems(Object obj);

GetItems getItems = EmitGetItems(typeof(List<>));
Array arr1 = getItems(new List<Int32>{1, 2, 5});
Array arr2 = getItems(new List<Object>(null, "String", new List<Int32>());
Array arr3 = getItems(new List<String>("Str1", "Str2");


Reflection.GetValue, к примеру, такого не умеет, если ты пытаешься вытащить поле, дескриптор которого помечен, как IsGenericParameter. Но, может быть, это можно сделать при помощи IL'а?
.net c# il expression reflection hack