- •Переменные и массивы в языке visual basic .Net
- •Локальные переменные и переменные-члены
- •Переменные экземпляров и общие переменные
- •Сохранение значений в массиве
- •Заполнение массива начальными значениями
- •Вложенные литералы массива
- •Перебор массива
- •Массивы как возвращаемые значения и параметры
- •Массивы нулевой длины
- •Размер массива
- •Типы массива и другие типы
- •Массивы массивов
- •Коллекции как альтернатива массивам
Массивы массивов
Массив, который содержит другие массивы как элементы, называется массивом массивов. Массив массивов и каждый элемент в массиве массивов могут иметь одно или несколько измерений. Иногда структура данных в приложении является двухмерной, но не прямоугольной.
В следующем примере имеется массив месяцев, каждый элемент которого представляет собой массив дней. Поскольку число дней в разных месяцах различно, элементы не образуют прямоугольный двухмерный массив. Следовательно, массив массивов используется вместо многомерного массива.
VB
' Declare the jagged array.
' The New clause sets the array variable to a 12-element
' array. Each element is an array of Double elements.
Dim sales()() As Double = New Double(11)() {}
' Set each element of the sales array to a Double
' array of the appropriate size.
For month As Integer = 0 To 11
Dim days As Integer =
DateTime.DaysInMonth(Year(Now), month + 1)
sales(month) = New Double(days - 1) {}
Next month
' Store values in each element.
For month As Integer = 0 To 11
Dim upper = sales(month).GetUpperBound(0)
For day = 0 To upper
sales(month)(day) = (month * 100) + day
Next
Next
Массивы нулевой длины
Массив без элементов также называется массивом нулевой длины. Переменная, содержащая массив нулевой длины, не имеет значения Nothing. Чтобы создать массив без элементов, объявите одно из измерений массива равным -1, как показано в следующем примере.
VB
Dim twoDimensionalStrings(-1, 3) As String
Возможно, потребуется создать массив нулевой длины в следующих случаях.
Без риска возникновения исключения NullReferenceException код должен обращаться к членам класса Array, таким как Length или Rank, или вызывать функцию Visual Basic, такую как UBound.
Требуется сделать соответствующий код проще, избежав необходимости проверки на значение Nothing как особый случай.
Код взаимодействует с интерфейсом API, который требует передачи массива нулевой длины в одну или несколько процедур или возвращает массив нулевой длины из одной или нескольких процедур.
Размер массива
Размер массива является произведением длин всех его измерений. Он представляет собой общее число элементов, в данный момент содержащихся в массиве.
В следующем примере показано объявление трехмерного массива:
Dim prices(3, 4, 5) As Long
Общий
размер массива в переменной prices составляет (3
+ 1) x (4 + 1) x (5 + 1) = 120.
Размер массива можно определить с помощью свойства Length. Длину каждого измерения многомерного массива можно получить с помощью метода GetLength.
Можно изменять размер переменной массива, присваивая ей новый объект массива, или с помощью оператора ReDim.
Типы массива и другие типы
Каждый массив имеет тип данных, но этот тип отличается от типа данных его элементов. Не существует единого типа данных, подходящего для всех массивов. Вместо этого тип данных массива определяется числом измерений массива, или рангом, и типом данных элементов массива. Две переменные массивов имеют один тип, только если массивы одного ранга и содержат данные одного и того же типа. Длины измерений массива не влияют на тип данных массива.
Каждый массив наследуется от класса System.Array, и можно объявить переменную типа Array, но не нельзя создать массив типа Array. Кроме того, Оператор ReDim (Visual Basic) не может работать с переменной, объявленной как тип Array. По этой причине и для строгой типизации рекомендуется объявить каждый массив как конкретный тип, например Integer, как в предыдущем примере.
Можно выяснить тип данных массива или его элементов несколькими способами.
Можно вызвать метод Object.GetType для переменной для получения объекта Type типа переменной времени выполнения. Объект Type содержит подробные сведения в своих свойствах и методах.
Можно передать переменную функции TypeName, чтобы получить объект String, содержащий имя типа времени выполнения.
Можно передать переменную функции VarType для получения значения VariantType, представляющего классификацию типа переменной.
В следующем примере вызывается функция TypeName для определения типа массива и типа элементов в массиве. Массив имеет тип Integer(,), а элементы массива относятся к типу Integer.
VB
Dim thisTwoDimArray(,) As Integer = New Integer(9, 9) {}
MsgBox("Type of thisTwoDimArray is " & TypeName(thisTwoDimArray))
MsgBox("Type of thisTwoDimArray(0, 0) is " & TypeName(thisTwoDimArray(0, 0)))
