Создать и экземпляр словаря (Of K, V) с Activator.CreateInstance - PullRequest
2 голосов
/ 08 апреля 2011

Учитывая приведенный ниже код, я пытаюсь создать новый экземпляр Dictionary(Of String, ??) на основе имеющейся у меня переменной ItemType. Как мне создать DictType, чтобы я мог использовать Activator для создания экземпляра типа, который мне нужен?

                Dim ItemType As Type            ' Data type of dictionary value
                Dim DictType As Type = ????     ' Dictionary(of String, ItemType)
                Dim NewDict = Activator.CreateInstance(DictType)

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Предположим, у вас есть параметр метода или локальная переменная типа Type, чье имя typeVariable. Тогда ответ:

Dim dictType = GetType(Dictionary(Of ,)).MakeGenericType(GetType(String), typeVariable)

См. Документацию (http://msdn.microsoft.com/en-us/library/system.type.makegenerictype.aspx) для примеров, в том числе с использованием словаря.

2 голосов
/ 08 апреля 2011

То, что вы ищете, это метод GetType.Это вернет экземпляр Type из указанного / связываемого имени типа.Например,

Dim dictType = GetType(Dictionary(Of String, Integer))
Dim newDict = Activator.CreateInstance(dictType)

РЕДАКТИРОВАТЬ

Вот версия для создания типа Dictionary(Of Key, Value), когда не все типы известны во время компиляции

Dim itemType As Type = ...
Dim dictRaw = GetType(Dictionary(Of ,))
Dim dictType = dictRaw.MakeGenericType(GetType(String), itemType)
Dim value = Activator.CreateInstance(dictType)
...