Objectlist Elemente kopieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
NoCee
Beiträge: 174
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Objectlist Elemente kopieren

Beitrag von NoCee »

Hallo zusammen,

ich schaue mir gerade Möglichkeiten zum dynamischen Speichern an. Arrays, TList, TObjectList usw.
Beim stundenlangen Suchen im Netz und rumprobieren sind dann bei TObjectList ein paar Fragen offengeblieben.

Kann man so was machen:

Code: Alles auswählen

BufferobjList2.add(BufferobjList1[0]);
bufferobjlist.Extract(bufferobjlist1[0]);
Kopieren eines Objekts in eine andere Liste und aus der alten Liste löschen.
Beim probieren hat das geklappt. Aber da war ja auch nichts drum rum wo mir Speicher überschreibt usw.

Dann noch folgendes:

Code: Alles auswählen

  Bufferobj:= bufferobjlist[0];// Fehler Type nicht kompatibel TObject bzw. TMyRecObj
  Bufferobj:= bufferobjlist[0]  as TMyRecObj;// so gehts  
Das mit dem "as" hab ich auf einer Delphiseite aufgeschnappt und wüßte jetzt gern was das darstellt und ob ich das so richtig verwende.
Mit der Lazarushilfe (F1) konnte ich nicht so arg viel anfangen und nach "as" im Netz zu suchen ist ziemlich sinnlos.
Sieht so aus wie wenns funktioniert. Aber obs so richtig ist wäre interessant zu wissen.

Schon mal danke für die Antworten
Gruß
NoCee

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Objectlist Elemente kopieren

Beitrag von theo »

A: Hängt davon ab: http://www.freepascal.org/docs-html/fcl ... jects.html

B: Ist richtig. So geht auch: Bufferobj:= TMyRecObj(bufferobjlist[0]);

NoCee
Beiträge: 174
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: Objectlist Elemente kopieren

Beitrag von NoCee »

Na prima,

A: Hab ich gelesen gehabt. Per Default true. Deshalb auch bei mir ...extract: löscht Element ohne free.

B: Genau diese Schreibweise hab ich eigentlich gesucht.

Danke dir für die Antworten
Einen schönen Tag noch
Gruß
NoCee

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: Objectlist Elemente kopieren

Beitrag von wp_xyz »

Genau diese Schreibweise hab ich eigentlich gesucht.
Kann dir aber einen Absturz erzeugen, wenn bufferobjlist[0] kein TMyRecObj ist. Im allgemeinen Fall solltest du vorher mit "is" noch prüfen, ob dies erfüllt ist:

Code: Alles auswählen

 
if bufferobjlist[0] is TMyRecObj then 
  BufferObj := TyMyRecObj(bufferobjlist[0])
else
  ShowMessage('Hier ist etwas schief gelaufen...');
 
"as" kombiniert die "is"-Abfrage mit der Typumwandlung und erzeugt eine Exception, falls bufferobjlist[0] nicht von TMyRecObj abstammt (statt dem "else"-Zweig in obigem Code). Ohne "as" bzw. "is" wirst du in diesem Fall mit einer generischen Fehlermeldung konfrontiert, die dich je nach Erfahrung mehr oder weniger lang nach dem Fehler suchen lässt.

http://wiki.freepascal.org/Operators/de ... operatoren

Antworten