![]() |
Литералы массивов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}) }
|