Pourquoi ne puis-je pas définir la taille d'un tableau en fonction d'une variable? Quelle est la meilleure façon de contourner cela?
Dim NumberOfZombies as integer
NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) as New Zombie
Vous pouvez utiliser un tableau dynamique lorsque vous ne connaissez pas le nombre de valeurs qu'il contiendra jusqu'à l'exécution:
Dim Zombies() As Integer
ReDim Zombies(NumberOfZombies)
Ou vous pouvez tout faire avec une seule instruction si vous créez un tableau local à une procédure:
ReDim Zombies(NumberOfZombies) As Integer
Tableaux de taille fixe nécessite que le nombre d'éléments contenus soit connu au moment de la compilation. C'est pourquoi vous ne pouvez pas utiliser une variable pour définir la taille du tableau - par définition, les valeurs d'une variable sont variables et ne sont connues qu'au moment de l'exécution.
Vous pourriez utiliser une constante si vous saviez que la valeur de la variable n'allait pas changer:
Const NumberOfZombies = 2000
mais il n'y a aucun moyen de transtyper entre les constantes et les variables. Ils ont des significations distinctement différentes.
Vous devez utiliser l'instruction ReDim pour dimensionner dynamiquement les tableaux.
Public Sub Test()
Dim NumberOfZombies As Integer
NumberOfZombies = 20000
Dim Zombies() As New Zombie
ReDim Zombies(NumberOfZombies)
End Sub
Cela peut sembler étrange lorsque vous connaissez déjà la taille de votre tableau, mais c'est parti!
Vous pouvez également étudier l'utilisation de l'objet Collection. Cela fonctionne généralement mieux qu'un tableau pour les objets personnalisés, car il dimensionne dynamiquement et propose des méthodes pour:
De plus, il est normalement plus facile de parcourir une collection car vous pouvez utiliser la structure for ... each très facilement avec une collection.
Vous devez utiliser une constante.
CONST NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) As Zombies
ou si vous voulez utiliser une variable, vous devez le faire de cette façon:
Dim NumberOfZombies As Integer
NumberOfZombies = 20000
Dim Zombies() As Zombies
ReDim Zombies(NumberOfZombies)