你可以将数组类型转换为满足以下条件的其他数组类型:
秩相等。 两个数组的排名必须相同,也就是说,它们必须具有相同的维度数。 但是,各个维度的长度不需要相同。
元素数据类型。 两个数组元素的数据类型必须是引用类型。 无法将
Integer
数组转换为Long
数组,甚至不能转换为Object
数组,因为至少涉及一个值类型。 有关详细信息,请参阅 值类型和引用类型。可兑换性 必须在两个数组的元素类型之间实现转换(加宽或缩小)。 未能满足此要求的一个示例是尝试在
String
数组与派生自System.Attribute的类的数组之间进行转换。 这两种类型没有共同点,它们之间不存在任何类型的转换。
将一个数组类型转换为另一个数组类型取决于相应元素的转换是扩大还是缩小。 有关详细信息,请参阅 “扩大和缩小转换”。
转换为对象数组
在不初始化数组的情况下声明 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