visual utilizar trabajar net matrices ejercicio ejemplos ejemplo dinamico dimensiones con como arreglos array vb.net arraylist

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.