Поделиться через


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

Вы можете преобразовать тип массива в другой тип массива, если вы соответствуете следующим условиям:

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

  • Тип данных элемента. Типы данных обоих массивов должны быть ссылочными типами. Невозможно преобразовать массив в 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  

См. также