В Visual Basic массивы представляют собой структуру фиксированной или изменяемой длины, которая хранит элементы одинакового типа. Динамические массивы особенно требуют внимания при инициализации и изменении размера.
В VB6 были только статические и динамические массивы, с фиксированным или изменяемым размером. В VB.NET реализованы полноценные одномерные, многомерные и ступенчатые массивы любого типа с безопасностью типов.
Частые ошибки —
Всегда инициализируйте массив перед использованием и осторожно изменяйте его размер:
' Объявление Dim arr() As Integer ' Инициализация ReDim arr(4) ' Индексы 0–4 arr(0) = 1 ' Изменение размера с сохранением значений ReDim Preserve arr(6)
Ключевые особенности:
Что произойдет, если объявить массив, но не выполнить его инициализацию?
Для одномерных массивов типа Dim arr() As Integer переменная существует, но сам массив не выделяется, обращение к arr.Length вызовет исключение.
Можно ли использовать ReDim Preserve для изменения размера многомерного массива по обеим осям?
Нет, ReDim Preserve разрешено только изменение последнего измерения, иначе будет ошибка времени выполнения.
Что произойдёт с элементами массива при увеличении размера через ReDim Preserve?
Старые значения сохранятся, а новые элементы получат значения по умолчанию (например, 0 для Integer, Nothing для ссылочных типов).
** Негативный кейс
Массив объявлен, но не инициализирован (Dim arr() As Integer), и при обращении к arr.Length получаем NullReferenceException.
Плюсы:
Минусы:
** Позитивный кейс
Массив всегда инициализируется явно через ReDim, изменение размера делается только вне основного цикла, а для часто меняющихся списков используется List(Of Integer).
Плюсы:
Минусы: