Инициализировать универсальный объект из System.Type - PullRequest
19 голосов
/ 14 мая 2010

Мне нужно создать универсальный тип, но я не знаю тип во время компиляции. Я хотел бы сделать это:

Type t = typeof(whatever);
var list = new List<t>

это не скомпилируется, потому что t не является допустимым типом. Но он знает все о допустимом типе. Есть ли способ динамически создать общий список из System.Type, как это? Мне может понадобиться рефлексия, и это нормально, я просто немного растерялся.

1 Ответ

26 голосов
/ 14 мая 2010

Как это:

Type t;
Type genericListType = typeof(List<>).MakeGenericType(t);
object list = Activator.CreateInstance(genericListType);

Обратите внимание, что вы можете назначить его только переменной типа object. (Хотя вы можете привести к не универсальному IList интерфейсу)

Чтобы использовать переменную list, вам, вероятно, понадобится отражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...