陣列轉換 (Visual Basic)
您可以將陣列類型轉換成不同的陣列類型,以符合下列條件:
等位。 兩個陣列的排名必須相同,也就是說,其必須具有相同的維度數目。 然而,個別維度的長度不需要相同。
元素資料類型。 這兩個陣列元素的資料類型必須是參考型別。 您無法將
Integer
陣列轉換成Long
陣列,或甚至轉換成Object
陣列,因為至少涉及一個實值型別。 如需詳細資訊,請參閱 Value Types and Reference Types。轉換性。 在兩個陣列的元素類型之間,必須能夠進行擴展或縮小轉換。 此需求失敗的範例是衍生自 System.Attribute 之類別中
String
陣列與陣列之間的嘗試轉換。 這兩種類型沒有共通點,且兩者之間不存在任何一種轉換。
依據個別元素的轉換是擴大或縮小,將一個陣列類型轉換成另一個陣列類型就會擴大或縮小。 如需詳細資訊,請參閱 Widening and Narrowing Conversions。
轉換成物件陣列
當您宣告 Object
陣列而不將陣列初始化時,只要其保持未初始化,其元素類型就會是 Object
。 當您將該陣列設定為特定類別的陣列時,其會採用該類別的類型。 然而,其基礎類型仍是 Object
,而您後續可以將其設定為不相關類別的另一個陣列。 由於所有類別都衍生自 Object
,因此您可以將陣列的元素類型從任一類別變更為任何其他類別。
在下列範例中,類型 student
與 String
之間不存在任何轉換,但兩者都衍生自 Object
,因此所有指派都有效。
' Assume student has already been defined as a class.
Dim testArray() As Object
' testArray is still an Object array at this point.
Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
testArray = New student(3) {}
' testArray is now of type student().
testArray = names
' testArray is now a String array.
列舉的基礎類型
若您原本宣告具有特定類別的陣列,其基礎元素類型就是該類別。 若您後續將其設定為另一個類別的陣列,則必須在兩個類別之間轉換。
在下列範例中,students
是 student
陣列。 由於 String
與 student
之間不存在轉換,因此最後一個陳述式會失敗。
Dim students() As student
Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
students = New Student(3) {}
' The following statement fails at compile time.
students = names