La récupération de données à partir d'un VB.NET liste de tableaux d'objets
Je suis en train de récupérer la valeur correcte à partir d'une liste de tableaux d'objets (.NET Framework 1.1):
J'ai l'défini suivant:
Public AlList As New ArrayList
Public Class ItemInfo
Public ItemNo As Int16
Public ItemType As String
Public Reports As Array
Public PDFs As Array
End Class
Le code d'événement form_load contient:
Dim AnItemObj As New ItemInfo
Puis une boucle qui comprend:
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)
Donc je devrais maintenant avoir une liste de tableaux de ces objets, mais si j'essaie de récupérer les données:
MsgBox(AlList(5).ItemNo)
Je reçois toujours le ItemNo de la dernière valeur dans la liste.
Ce qui me manque?
OriginalL'auteur Tim the Enchanter | 2009-06-30
Vous devez vous connecter pour publier un commentaire.
Mettre le code suivant:
à l'intérieur de la boucle qui ajoute AnItemObj à la liste.
Lorsque vous ajoutez un type de référence à une liste, vous êtes seulement l'ajout de la référence, et non la valeur.
Cela signifie que si vous ajoutez 10 fois la même instance à une liste, il va ajouter 10 fois la même référence à la liste. Mais si, par la suite, vous avez encore une référence à la présente instance, vous pouvez modifier ses propriétés et comme toutes les 10 entrées dans la liste de point à la même référence dans la mémoire, toutes les 10 entrées seront modifiés.
OriginalL'auteur Darin Dimitrov
Donc, vous avez:
Ce qui se passe ici c'est que vous êtes en train de créer un objet unique, la définition des valeurs, et l'ajout d'une référence à elle, à votre liste. Vous êtes alors en changeant votre ItemInfo et addign une autre référence à la même élément à votre liste
Vous avez besoin pour construire un nouvel objet à chaque tour de boucle, lâche ainsi:
OriginalL'auteur Rowland Shaw
Êtes-vous créer une nouvelle instance de iteminfo pour chaque incrémentation de la boucle?
OriginalL'auteur Antony Delaney
Je ne peux pas voir votre code en boucle mais j'imagine que la cause n'est pas de mise AnItemObj à un Nouvel objet ItemInfo. Donc, vous venez de finir de modifier le même objet et en l'ajoutant le nouveau la liste (tous les éléments de la liste pointent vers le même objet).
OriginalL'auteur colithium