2011-08-30 13 views
11

utilizzando Delphi 7:Utilizzo di AddObject di TStringList con numeri interi?

  • Come posso aggiungere un numero intero alla quota oggetto di un elemento stringlist, utilizzando AddObject?
  • Come recuperare il valore intero da un oggetto proprietà dell'elemento stringa?
  • Come si liberano tutti gli oggetti e l'elenco al termine?

risposta

38

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. 
+1

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. –

+0

@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. –

+0

@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

Problemi correlati