Zitat von
Raffigator:
Hmm, ArrayList ist ja gut und schön, aber wie kann ich dort eine Liste von Records erstellen?
Am besten gar nicht.
Records machen in .Net nur da Sinn, wo man
- nicht daran vorbeikommt (P/Invoke) oder
- sie per-design immer lokal auf dem Stack leben.
- Pointer gehen nur auf ValueTypes
Ist alles nicht wirklich häufig.
In jedem anderen Fall sind ValueTypes mit Extrakosten verbunden.
Du kannst value types wunderbar wie primitive Werte behandeln, ein Int32 kann vom JIT, je nach Situation, wie ein normaler, nativer Int32 benutzt werden.
Du kannst sie auch wie ein Objekt benutzen, was du hier scheinbar willst. (ArrayList hält System.Object-Referenzen)
Aber letzteres erfordert, dass der Record wert durch Boxing zu einem Referenzwert wird.
Zitat:
Lässt sich ja problemlos kompilieren, aber wie kann ich hinterher auf die Daten in meinem Array zugreifen?
MyList[0].RecordTeil funktioniert ja nicht...
Na Type casting natürlich:
DeinTyp(deineListe[0]).DoSomething();
Wobei du hier aufpassen musst. .Net ist
wirklich type safe: Du kannst nicht die Königin auf Int boxen.
Ein type cast á la DeinTyp(wert) gibt dir entweder einen Wert von DeinTyp zurück, oder wenn "wert" sich nicht umwandeln lässt, nil.
wert as DeinTyp wird eine
Exception werfen.
Ersteres ist bestimmt Ursache #1 für all die netten "Object reference not set to an instance of an object"-Meldungen, die man so in freier Natur vorfindet. :mgreen: