陣列轉換 (Visual Basic)

您可以將陣列類型轉換成不同的陣列類型,以符合下列條件:

  • 等位。 兩個陣列的排名必須相同,也就是說,其必須具有相同的維度數目。 然而,個別維度的長度不需要相同。

  • 元素資料類型。 這兩個陣列元素的資料類型必須是參考型別。 您無法將 Integer 陣列轉換成 Long 陣列,或甚至轉換成 Object 陣列,因為至少涉及一個實值型別。 如需詳細資訊,請參閱 Value Types and Reference Types

  • 轉換性。 在兩個陣列的元素類型之間,必須能夠進行擴展或縮小轉換。 此需求失敗的範例是衍生自 System.Attribute 之類別中 String 陣列與陣列之間的嘗試轉換。 這兩種類型沒有共通點,且兩者之間不存在任何一種轉換。

依據個別元素的轉換是擴大或縮小,將一個陣列類型轉換成另一個陣列類型就會擴大或縮小。 如需詳細資訊,請參閱 Widening and Narrowing Conversions

轉換成物件陣列

當您宣告 Object 陣列而不將陣列初始化時,只要其保持未初始化,其元素類型就會是 Object。 當您將該陣列設定為特定類別的陣列時,其會採用該類別的類型。 然而,其基礎類型仍是 Object,而您後續可以將其設定為不相關類別的另一個陣列。 由於所有類別都衍生自 Object,因此您可以將陣列的元素類型從任一類別變更為任何其他類別。

在下列範例中,類型 studentString 之間不存在任何轉換,但兩者都衍生自 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.  

列舉的基礎類型

若您原本宣告具有特定類別的陣列,其基礎元素類型就是該類別。 若您後續將其設定為另一個類別的陣列,則必須在兩個類別之間轉換。

在下列範例中,studentsstudent 陣列。 由於 Stringstudent 之間不存在轉換,因此最後一個陳述式會失敗。

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  

另請參閱