我正在使用typebuilder在运行时创建一个类,在创建此类之后,我想为列表定义类型,如
dim fooList as new List(of DynamicClassName)
由于这在编译时不存在,当然会抛出错误。当我生成这种类型时,我返回类型,所以我不能做像
这样的事情dim newType = createNewType(foobar)
dim fooList as new List(of getType(newType))
如何在运行时分配List的类型?
答案 0 :(得分:2)
您可以创建List(Of T)
,但AFAIK将无法将其强制转换为类型化对象。我在以下示例中使用了String
类型。
Dim list As Object = Activator.CreateInstance(GetType(List(Of )).MakeGenericType(New Type() {GetType(String)}))
Debug.WriteLine((TypeOf list Is List(Of String)).ToString())
<强>输出强>
真
所以在你的情况下,它看起来像这样:
Dim newType = createNewType(foobar)
'Creates a List(Of foobar):
Dim list As IList = Ctype(Activator.CreateInstance(GetType(List(Of )).MakeGenericType(New Type() {newType})), IList)
'Creates a BindingList(Of foobar):
Dim bindingList As IBindingList = Ctype(Activator.CreateInstance(GetType(BindingList(Of )).MakeGenericType(New Type() {newType})), IBindingList)
答案 1 :(得分:0)
这不能解答您的问题,但可以解决您的问题。
另一种选择是使用ArrayList(您不必为其分配类型)。您可以在此处查看详细信息:http://msdn.microsoft.com/en-us/library/system.collections.arraylist(v=vs.110).aspx。
这是一个基本的例子:
Dim anyArrayList as new ArrayList()
anyArrayList.add("Hello")
anyArrayList.add("Testing")