2013-10-01 210 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