D:How can i add an integer to the object portion of a stringlist item, using AddObject?
A: appena lanciato il valore intero a TObject
List.AddObject('A string',TObject(1));
D:How can a retrieve the integer back from a object property of stringlist item?
A: Fusioni a interi il valore dell'oggetto
AValue := Integer(List.Objects[i]);
D:How do i free all objects and list when done?
A: Non è necessario liberare la lista degli oggetti, perché non sta assegnando la memoria. quindi chiama solo la procedura Free
dello TStringList
.
Prova! Campione
{$APPTYPE CONSOLE}
uses
Classes,
SysUtils;
Var
List : TStringList;
i : Integer;
begin
try
List:=TStringList.Create;
try
//assign the string and some integer values
List.AddObject('A string',TObject(1));
List.AddObject('Another string',TObject(100));
List.AddObject('And another string',TObject(300));
//Get the integer values back
for i:=0 to List.Count - 1 do
Writeln(Integer(List.Objects[i]));
finally
//Free the list
List.free;
end;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
Readln;
end.
Tu mi ha battuto ad esso, stavo scrivendo una risposta, ma io upvote tuo posto. Come nota finale all'OP, non è necessario liberare esplicitamente alcun oggetto, ad eccezione dell'elenco, poiché TStringList libera il proprio elenco interno di puntatori e non sono stati creati oggetti, ma solo numeri interi memorizzati in tale elenco. Questo è ciò che RRUZ ha mostrato, liberando solo TSTringList. –
@RRUZ - +1 Wow! Penso che tu abbia appena risolto un problema importante per me che ho cercato di capire. Mi piace usare coppie ID/Valore per i valori di ricerca del database. Quindi, se capisco correttamente quanto sopra, posso visualizzare List.Strings [i] (la parte valore) in un menu a discesa e utilizzare il numero intero associato (List.Objects [i]) come ID ForeignKey nel database. –
@IElite, ho usato un trucco simile per memorizzare un elenco di valori in virgola mobile in cui la precisione e l'intervallo dinamico non sono cruciali (il tipo Delphi 'single' è di 4 byte e può essere tipizzato con un puntatore). Puoi anche usare un TList se non ci sono stringhe e gli interi/float sono tutti quelli che vuoi memorizzare. – rossmcm