Почему мне не удается установить размер массива на основе переменной? Какой лучший способ?
Dim NumberOfZombies as integer
NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) as New Zombie
Почему мне не удается установить размер массива на основе переменной? Какой лучший способ?
Dim NumberOfZombies as integer
NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) as New Zombie
Вы можете использовать динамический массив , когда вы не знаете, сколько значений оно будет содержать до времени выполнения:
Dim Zombies() As Integer
ReDim Zombies(NumberOfZombies)
Или вы можете сделать все с помощью одного оператора, если вы создаете массив, локальный для процедуры:
ReDim Zombies(NumberOfZombies) As Integer
Матрицы фиксированного размера требуют, чтобы количество элементов было известно во время компиляции. Вот почему вы не можете использовать переменную для установки размера массива по определению, значения переменной являются переменными и известны только во время выполнения.
Вы можете использовать константу, если знаете, что значение переменной не изменилось:
Const NumberOfZombies = 2000
но нет никакого способа бросить между константами и переменными. Они имеют совершенно разные значения.
Вы должны использовать оператор ReDim для динамического масштабирования массивов.
Public Sub Test()
Dim NumberOfZombies As Integer
NumberOfZombies = 20000
Dim Zombies() As New Zombie
ReDim Zombies(NumberOfZombies)
End Sub
Это может показаться странным, когда вы уже знаете размер вашего массива, но там вы идете!
Вы также можете изучить использование объекта Collection. Обычно это работает лучше, чем массив для пользовательских объектов, поскольку он динамически размер и имеет методы для:
Плюс его обычно легче прокручивать через коллекцию, так как вы можете легко использовать каждую структуру... с каждой коллекцией.
Вам нужно использовать константу.
CONST NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) As Zombies
или если вы хотите использовать переменную, вы должны сделать это следующим образом:
Dim NumberOfZombies As Integer
NumberOfZombies = 20000
Dim Zombies() As Zombies
ReDim Zombies(NumberOfZombies)