Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Dynamische Datenstrukturen in .NET (https://www.delphipraxis.net/91142-dynamische-datenstrukturen-net.html)

Elvis 30. Apr 2007 15:07

Re: Dynamische Datenstrukturen in .NET
 
Zitat:

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
  1. nicht daran vorbeikommt (P/Invoke) oder
  2. sie per-design immer lokal auf dem Stack leben.
  3. 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:
Delphi-Quellcode:
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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz