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


Преобразование массивов (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  

См. также