Преобразование массивов (Visual Basic)

Тип массива можно преобразовать в другой тип при соблюдении следующих условий:

  • Равенство ранга. Ранги двух массивов должны быть одинаковы, т.е. они должны иметь одинаковое количество размерностей. В то же время длины соответствующих измерений не обязательно должны совпадать.

  • Тип данных элемента. Типы данных элементов обоих массивов должны быть ссылочными типами. Нельзя преобразовать массив Integer в массив Long или даже в массив Object, так как в нем содержится по крайней мере один тип значения. Дополнительные сведения см. в разделе Реализация типов данных (Visual Basic).

  • Возможность преобразования. Преобразование между типами элементов двух массивов возможно как расширяющее, так и сужающее. Пример, который не соответствует этим требованиям — попытка преобразования между массивом String и массивом класса, производного от System.Attribute. Эти два типа не имеют ничего общего, и для них не существует преобразования.

Преобразование одного типа массива в другой является расширяющим или сужающим в зависимости от того, расширяющими или сужающими являются преобразования соответствующих элементов. Дополнительные сведения см. в разделе Расширяющие и сужающие преобразования (Visual Basic).

Преобразование в массив Object

Если массив 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

См. также

Задачи

Практическое руководство. Преобразование объекта к другому типу в Visual Basic

Ссылки

Сводка типов данных (Visual Basic)

Функции преобразования типов (Visual Basic)

Основные понятия

Типы данных в Visual Basic

Явные и неявные преобразования (Visual Basic)

Изменение значений в процессе преобразований (Visual Basic)

Преобразование значений между строковыми и другими типами (Visual Basic)

Программирование без типов в Visual Basic

Массивы в Visual Basic

Другие ресурсы

Преобразование типов в Visual Basic