Создание экземпляра общего типа <T>с переменной, содержащей тип - PullRequest
82 голосов
/ 17 января 2010

Можно ли получить следующий код? Я знаю, что это не работает, но мне интересно, есть ли обходной путь?

Type k = typeof(double);
List<k> lst = new List<k>();

Ответы [ 3 ]

115 голосов
/ 17 января 2010

Да, есть:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);
3 голосов
/ 24 сентября 2011

Более чистым способом может быть использование универсального метода. Сделайте что-то вроде этого:

static void AddType<T>()
    where T : DataObject
{
    Indexes.Add(typeof(T), new Dictionary<int, T>());
}
0 голосов
/ 14 февраля 2018

Попробуйте это:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);
...