vb.net - utilizar - trabajar con matrices en vb net
Recuperando datos de una lista de arrays VB.NET de objetos (4)
Estoy tratando de recuperar el valor correcto de una ArrayList de objetos (.NET 1.1 Framework):
Tengo lo siguiente definido:
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
El código del evento form_load contiene:
Dim AnItemObj As New ItemInfo
Luego, un ciclo que incluye:
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)
Así que ahora debería tener una ArrayList de estos objetos, sin embargo, si trato de recuperar los datos:
MsgBox(AlList(5).ItemNo)
Siempre obtengo el ItemNo del último valor en la lista.
¿Qué me estoy perdiendo?
¿Estás creando una nueva instancia de iteminfo para cada incremento del ciclo?
Entonces, tienes:
Dim AnItemObj As New ItemInfo
For ...
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)
Next
Lo que está sucediendo aquí es que está creando un solo objeto, estableciendo los valores en él y agregando una referencia a él, a su lista. Luego está cambiando su ItemInfo y agrega otra referencia al mismo elemento a su lista
Necesitas construir un nuevo objeto en cada ciclo, sin apretar así:
Dim AnItemObj As ItemInfo
For ...
AnItemObj = New ItemInfo
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)
Next
No puedo ver el código de bucle completo, pero me imagino que la causa no es establecer AnItemObj en un nuevo objeto ItemInfo. Entonces terminas modificando el mismo objeto y agregándolo nuevamente a la lista (todos los elementos en la lista apuntan al mismo objeto).
AnItemObj = New ItemInfo()
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)
Pon el siguiente código:
Dim AnItemObj As New ItemInfo
dentro del ciclo que agrega AnItemObj a la lista.
Cuando agrega un tipo de referencia a una lista, solo está agregando la referencia, no el valor.
Esto significa que si agrega 10 veces la misma instancia a una lista, agregará 10 veces la misma referencia a la lista. Pero si luego aún tiene una referencia a esta instancia, puede modificar sus propiedades y, como las 10 entradas de la lista apuntan a la misma referencia en la memoria, se modificarán las 10 entradas.