在运行时在vb.net中定义List的类型

时间:2014-07-10 12:36:12

标签: vb.net

我正在使用typebuilder在运行时创建一个类,在创建此类之后,我想为列表定义类型,如

dim fooList as new List(of DynamicClassName)

由于这在编译时不存在,当然会抛出错误。当我生成这种类型时,我返回类型,所以我不能做像

这样的事情
dim newType = createNewType(foobar)
dim fooList as new List(of getType(newType))

如何在运行时分配List的类型?

2 个答案:

答案 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")