Преобразование массивов (Visual Basic)
Вы можете преобразовать тип массива в другой тип массива, если вы соответствуете следующим условиям:
Равный ранг. Ряды двух массивов должны быть одинаковыми, т. е. они должны иметь одинаковое количество измерений. Однако длина соответствующих измерений не должна совпадать.
Тип данных элемента. Типы данных обоих массивов должны быть ссылочными типами. Невозможно преобразовать массив в
Integer
массивLong
или дажеObject
в массив, так как используется хотя бы один тип значения. Для получения дополнительной информации см. Value Types and Reference Types.Конвертируемости. Преобразование( расширение или сужение) должно быть возможным между типами элементов двух массивов. Пример, который не соответствует этому требованию, является попыткой преобразования между
String
массивом и массивом класса, производным от System.Attribute. Эти два типа не имеют общего, и преобразование любого вида между ними не существует.
Преобразование одного типа массива в другой — расширение или сужение в зависимости от того, расширяется ли преобразование соответствующих элементов или сужается. Для получения дополнительной информации см. Widening and Narrowing Conversions.
Преобразование в массив объектов
При объявлении массива Object
без инициализации его тип Object
элемента остается неинициализированным. При установке массива определенного класса он принимает тип этого класса. Однако его базовый тип по-прежнему Object
является, и его можно впоследствии задать для другого массива несвязанного класса. Так как все классы производны от Object
, можно изменить тип элемента массива с любого класса на любой другой класс.
В следующем примере преобразование между типами и String
обоими производными Object
от них student
не существует, поэтому все назначения допустимы.
' 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