2013-10-01 211 views
3

在Visual Basic.net中,我可以使用另一个对象的类型创建一个Object或T的List。从另一个对象类型创建一个对象

下面是一些代码:

Dim TestObjectType As Author 
Dim TestObject As TestObjectType.GetType 

我得到一个错误:

TestObjectType.GetType is not defined

编辑

我可以创建一个特定类型的Type对象,然后创建对象,列表或将此对象从此Type对象转换为此类型?

+0

我怀疑这会编译 – Renaissance

回答

2

Dim TestObject As TestObjectType.GetType将在命名空间TestObjectType中寻找名为GetType的类型。


若要使用System.Type一个类的实例,你可以使用Activator.CreateInstance

Dim TestObject = Activator.CreateInstance(TestObjectType.GetType()) 

要创建一个通用的列表,你可以使用Type.MakeGenericType

Dim listType = GetType(List(Of)).MakeGenericType(TestObjectType.GetType()) 
Dim list = Activator.CreateInstance(listType) 

注意,这两个以上片段返回Object;不过,你可以利用泛型来实现编译时的安全性:

Dim TestObject = CreateNew(TestObjectType) 
Dim AuthorList = CreateNewList(TestObjectType) 

... 

Function CreateNew(Of T As New)(obj As T) As T 
    Return New T() 
End Function 

Function CreateNewList(Of T)(obj As T) As List(Of T) 
    Return New List(Of T) 
End Function 
+0

感谢Dominic。你能看看我的编辑吗? – Simon

+0

*我可以创建一个特定类型的Type对象吗?*你的意思是像'Dim authorType As System.Type = GetType(Author)'? *然后创建对象,列表*是的,看看我的答案。 *或从这个Type对象将这个类型的对象转换成这种类型*这没有意义,因为只有在编译时铸造才有用。您不知道您想要投入的'System.Type'类型将实际表示哪种类型。 – sloth