Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Problema out of bounds TObjectList con count mayor a cero (https://www.clubdelphi.com/foros/showthread.php?t=76715)

jasmad 21-11-2011 20:58:58

Problema out of bounds TObjectList con count mayor a cero
 
Buenas,

En este momento me encuentro experimentando con las TObjectList, ya que estas son muy simples de usar para alguien que no sabe trabajar con punteros(como yo), todo iva excelente, cuando creo la lista
Código Delphi [-]
lista := TObjectList.Create(true)

y empiezo añadir elementos
Código Delphi [-]
lista.Add(Empleado)

, inclusive cuando hago esto
Código Delphi [-]
tempEmpleado := (lista.Extract(lista[0]) as TEmpleado);

todo bien. Pero el item siguiente me genera error
Código Delphi [-]
tempEmpleado := (lista.Extract(lista[1]) as TEmpleado);

con la excepcion de out of bounds indicando que el elemento en el index 1 no existe cuando
Código Delphi [-]
ShowMessage(intttostr(lista.Count));

me muestra que es igual a tres. No se si esque estoy trabajando mal el list.

Gracias por la ayuda brindada

Neftali [Germán.Estévez] 22-11-2011 10:39:32

Si sólo quieres acceder al ítem utiliza:

Código Delphi [-]
  tempEmpleado := (lista.Items[0] as TEmpleado);

Piensa que con el Extract, además de acceder al elemento lo eliminas de las lista, por tanto los índices cambian (se decrementan).

Si utilizas por ejemplo un for para recorrer la lista y dentro de él un Extract, fallará el recorrido, a no ser que lo hagas en orden inverso.
¿Puedes poner el código completo que utilizas?

jasmad 22-11-2011 17:58:15

gracias neftali el problema es el mismo que menciona, extraer saca el objeto inmediatamente y mueve los otros
Código Delphi [-]
//Esto me daba error porque se restan elementos 
 for i:=0 to lista.Count-1 do begin 
      tempEmpleado := (lista.Extract(lista[1]) as TEmpleado); 
      showMessage(inttostr(lista.Count));//mostrara valor diferente al inicial pero no se puede hacer nada ya que el for esta encaminado 
 end; 

 //esto sale bien 
 for i:=0 to lista.Count-1 do begin 
           tempEmp:=((lista[i]) as TEmpleado); 
 end;

disculpa no analice el procedimiento algo tan simple, esque estoy acostumbrado a ver la descripcion de los procedimientos y funciones en el autocompletar del ide y como lazarus no lo tiene no tengo como verlas ;P

Neftali [Germán.Estévez] 22-11-2011 18:21:50

En caso de necesitar el Extract se trataría de hacerlo en orden inverso....

Código Delphi [-]
for i:=(lista.Count-1) downto 0 do begin 
...

jasmad 06-12-2011 22:06:46

ok lo tendre en cuenta gracias


La franja horaria es GMT +2. Ahora son las 21:08:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi