У меня есть шаблон c class MyList<T> : MyBaseClass, IList<T>
, который принимает неизвестное количество неизвестных типов элементов.
В другом месте я объявляю некоторые пользовательские списки НО без их создания ( это должен из-за некоторых общих ограничений ):
MyList<MyObjectType1> type1List1, type1List2,... ;
MyList<MyObjectType2> type2List1, type2List2,... ;
Я хотел бы создать эти пользовательские списки во время выполнения, используя отражение:
foreach (FieldInfo field in this.GetType().GetFields())
{
if (field.FieldType == typeof(MyList<>)) // this condition is **NEVER** passed!
{
MyList<>valueToSet = new MyList<>(); // does not work, needs type
MyList<T>valueToSet = new MyList<T>(); // does not work, there's no T
MyList<...?...>valueToSet = new MyList<...?...>(); // how can i put here the type?
field.SetValue(this, valueToSet);
...
}
}
Проблемы, с которыми я столкнулся, заключаются в том, что тип объектов, используемых в каждом из объявленных списков, неизвестен до времени выполнения, я не могу найти выражение для использования в моем коде для создания экземпляра MyList<...?...>valueToSet = new MyList<...?...>()
, а также, что удивительно (по крайней мере для меня) выражение if (field.FieldType == typeof(MyList<>))
никогда не проходит.
На всякий случай рекомендуется учитывать, что из-за некоторых зависимостей и ограничений класса я не могу создать интерфейс для MyList<T>
.
Спасибо заранее за любую помощь!
РЕДАКТИРОВАТЬ:
Благодаря Mike и Sweeper я мог бы решить полностью эта проблема