Zugriff auf ListObject innerhalb eines Objectes

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

StarGazer

Betreff: Zugriff auf ListObject innerhalb eines Objectes

BeitragSa, Nov 17, 2007 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe da ein blödes Porblem mit Listen die sich in einem Objekt befinden.
Ich möchte gern darauf zugreifen könne mit First und Last, doch es klappt leider nicht.
Das BlitzWiki Beispiel hilf einem leider auch nicht weiter, da es dort nur um Listen außerhalb eines Objektes handelt, und klappt bei mir leider nicht Sad Hier im Forum habe ich leider auch nichts passendes gefunden.
Hoffe es kann mir jemand helfen.

Code: [AUSKLAPPEN]
Type Street
Field CarList:TList = CreateList()
EndType

Type Car
Field Typ:String
EndType


s:Street = New Street

'--------------------
a:Car = New Car
a.Typ = "Audio"
ListAddLast s.CarList,a

a:Car = New Car
a.Typ = "BMW"
ListAddLast s.CarList,a

a:Car = New Car
a.Typ = "Opel"
ListAddLast s.CarList,a
'--------------------


i:Car = s.CarList.first()     FEHLER -> Unable To covert from 'Object' to 'Car'
i:TLink = s.CarList.first()   FEHLER -> Unable To covert from 'Object' to 'brl.linkedlist.TLink'

name:String = i.Typ

mahe

BeitragSo, Nov 18, 2007 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst in diesem Fall unbedingt ein Typ-Cast machen:
Code: [AUSKLAPPEN]
i:Car = Car( s.CarList.first() )


Außerdem ist
Code: [AUSKLAPPEN]
s.CarList.AddLast(a)

viel hübscher als
Code: [AUSKLAPPEN]
ListAddLast s.CarList,a

Dies aber nur nebenbei Wink
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,

StarGazer

BeitragSo, Nov 18, 2007 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
super, so funktioniert es Very Happy
Danke

aber geht er dabei wirklich nur auf das erste Object dass sich in der "s.CarList" befinden, oder nimmt er das allerste "Car" Object ansich, auch wenn es sich nicht in der Liste befinden sollte ?
Die Frage kam mir in den Sin weil Du i:Car = Car machst. (kenne Typ-Cast noch nicht Embarassed , bin in BMax noch ziemlich grün hinter den Ohren Laughing)


PS:
ist s.CarList.AddLast(a) sonst irgendwie sinvoller als ListAddLast s.CarList,a (schneller oder so?)

ListAddLast s.CarList,a war das erste Beispiel was ich mal irgendwo fand Smile

mahe

BeitragSo, Nov 18, 2007 1:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wird wirklich nur das erste Objekt der entsprechenden Liste zurückgegeben.

Mit Car() wird nur das zurückgegebene Objekt in ein Car-Objekt umgewandelt.
In der Liste wird dein Car in einer Variable vom Typ "Object" gespeichert weshalb diese "Umwandlung" nötig ist. "Object" deshalb weil unterschiedlichste Objekte gespeichert werden können.


.AddLast ist auf jeden Fall objektorientierter und höchstwahrscheinlich auch etwas schneller.
ListAddLast ist eigentlich nur ein "Wrapper" für die Methode AddLast.

Im LinkedList-Modul sieht das so aus:
Code: [AUSKLAPPEN]
Function ListAddFirst:TLink( list:TList,value:Object )
   Return list.AddFirst( value )
End Function
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,

StarGazer

BeitragSo, Nov 18, 2007 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Dir für die Infos, jetzt verstehe ich das ganze etwas besser.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group