Студопедия
rus | ua | other

Home Random lecture






Литералы массивов


Date: 2015-10-07; view: 353.


В Visual Basic 2010 также внесены существенные усовершенствования в работу с массивами. Рассмотрим следующий код (который нормально работает в более старых версиях):

Dim numbers As Integer() = New Integer() {1, 2, 3, 4, 5}

Видно, что все элементы массива имеют тип Integer, поэтому дважды указывать тип Integer в этой строке явно излишне. Литералы массива позволяют создавать массив, помещая все его элементы в скобки, а тип автоматически распознается компилятором:

Dim numbers = {1, 2, 3, 4, 5}

Типом numbers является не Object, а Integer() (если флаг Option Infer включен), потому что литерал массива теперь может быть самостоятельным и иметь собственный тип. Возьмем более сложный случай:

Dim numbers = {1, 2, 3, 4, 5.555}

Здесь тип numbers будет логически определен как Double(). Компилятор определяет тип, изучая каждый элемент массива и вычисляя доминантный тип (по тому же алгоритму, который обсуждался ранее при рассмотрении лямбд выражений). Но что будет, если доминантного типа нет, как в следующем коде:

Dim numbers = {1, 2, 3, 4, "5"}

В этом случае преобразование Integer в String было бы сужающим (т. е. потенциально могло бы повлечь потерю данных в период выполнения), но и преобразование String в Integer тоже оказалось бы сужающим. Поэтому единственный безопасный тип — Object() (компилятор выдаст ошибку, если включен флаг Option Strict).

Литералы массива можно вкладывать для формирования многомерных или нерегулярных (jagged) массивов:

'2-dimensional array

Dim matrix = {{1, 0}, {0, 1}}

 

'jagged array - the parentheses force evaluation of the inner array first

Dim jagged = { ({1, 0}), ({0, 1}) }

 


<== previous lecture | next lecture ==>
Инициализаторы набора | Исполняющая среда динамических языков
lektsiopedia.org - 2013 год. | Page generation: 0.072 s.