![]() |
Dynamische Datenstrukturen in .NET
Moin,
meine Frage ist, wie es im Allgemeinen so aussieht mit dynamischen Datenstrukturen, insbesondere verkettete Listen. Kompilieren lässt sich das ganze ja nur im $UNSAFAMODE ON. Werden solche Strukturen nicht gern gesehen? Bei mir geht es konkret darum, eine variierende Anzahl an Datensätzen aus Textdateien einzulesen um diese dann hinterher in verschiedenenen Tabellen in der DB zu speichern. Ich würde das ganze gerne erst in verketteten Listen zwischenspeichern und dann die Liste durchgehen und in der DB speichern...oder hat jemand einen besseren Ansatz? MfG Raphael |
Re: Dynamische Datenstrukturen in .NET
Sie basieren ja auf Zeigern, welche man vermeiden sollte
|
Re: Dynamische Datenstrukturen in .NET
Hrm? .NET hat doch nix gegen verkettete Listen :gruebel:
Du musst halt aufpassen, dass Dein Element ein echtes Objekt ist und Du echte Objektreferenzen speicherst und nicht Pointer. |
Re: Dynamische Datenstrukturen in .NET
@mkinzler: Wieso sind denn Zeiger zu vermeiden?
@Phoenix: Hättest du da zufällig einen kleinen Codeschnipsel? Bin neu in der .NET-Welt und kann mir gerade nicht ganz vorstellen wie das zu implementieren ist... |
Re: Dynamische Datenstrukturen in .NET
Weil sie auf Speicherstellen weisen, man sollte stattdessen Referenzen verwenden.
Warum schreibst du die DS nicht sofort in die DB? |
Re: Dynamische Datenstrukturen in .NET
Zitat:
Problem ist halt, dass Teile eines DS in verschiedene Tabellen gespeichert werden und nicht alles in einer... |
Re: Dynamische Datenstrukturen in .NET
Nein, habe ich nicht, denn ich arbeite nicht mit Delphi.NET sondern mit C#, und da gibts bei mir sowas wie ein List<T> :mrgreen:
Aber im Prinzip brauchst Du nur Deinen Datentypen um eine Referenz auf den gleichen Datentypen zu erweitern und auf die packst Du dann das nächste Element oder am Ende eben null. Wobei.. wäre das nicht mit einem Array leichter zu erreichen? |
Re: Dynamische Datenstrukturen in .NET
Zitat:
|
Re: Dynamische Datenstrukturen in .NET
Delphi-Quellcode:
arr: array of ...;
... setLength( arr, <Größe>); |
Re: Dynamische Datenstrukturen in .NET
Zitat:
Ja, vielleicht ist das wirklich das sinnvollste...ich werde mal in diese Richtung weiter denken |
Re: Dynamische Datenstrukturen in .NET
Zitat:
Zitat:
Records haben in .Net auf'm Heap nix zu suchen, das ist alles andere als performant. (siehe "Boxing" in egal welcher(m) .Net-Doku oder Buch) btw: ![]() In .Net >= 2.0 gibt es beides: List<T> (array basiert) und Linked<T>. In 1.1 kannst du also entweder mit der ArrayList arbeiten oder dir schnell eine verkette Liste friemeln. ;) |
Re: Dynamische Datenstrukturen in .NET
Zitat:
|
Re: Dynamische Datenstrukturen in .NET
Zitat:
Das eine ist ein BCL Klasse, die intern ihre Daten in einem Array verwaltet. (Klassisches verdoppeln wenn Count >= Capacity), das andere taugt höchstens was um sich am generierten IL zu belustigen. Oder in Delphi-Speak: ArrayList == TList mit Object statt Pointer als Elementtyp. System.Array ist immutable, will heißen eine Instanz mit 5 Elementen kann nicht plötzlich 6 haben. Delphi löst das indem es Zwischenvariablen einbaut und alles immer schön hin und her schubst. |
Re: Dynamische Datenstrukturen in .NET
Hallo,
Zitat:
Sie werden wohl unter Delphi/Pascal nicht so oft verwendet, aber dies ist ja kein Grund diese ganz zu meiden. Gruß Jörg |
Re: Dynamische Datenstrukturen in .NET
Zitat:
|
Re: Dynamische Datenstrukturen in .NET
Zitat:
Ergo -> Typunsicher, daher unsicherer Code, und damit nicht im Sinne von .NET. |
Re: Dynamische Datenstrukturen in .NET
Zitat:
![]() |
Re: Dynamische Datenstrukturen in .NET
Also ist nun ArrayList das Stichwort? Das ganze sollte natürlich schon performant sein...Da die Listen auch relativ lang werden könnten im Programm, bietet sich dann wohl die ArrayList an, richtig?
|
Re: Dynamische Datenstrukturen in .NET
Zitat:
|
Re: Dynamische Datenstrukturen in .NET
Hmm, ArrayList ist ja gut und schön, aber wie kann ich dort eine Liste von Records erstellen?
Delphi-Quellcode:
Lässt sich ja problemlos kompilieren, aber wie kann ich hinterher auf die Daten in meinem Array zugreifen?
...
type TMyRecord = record //mehrere Daten end; ... var MyList : ArrayList; MyRecord : TMyRecord; ... begin ... MyList := ArrayList.Create; MyList.Add(MyRecord); ... end; MyList[0].RecordTeil funktioniert ja nicht... |
Re: Dynamische Datenstrukturen in .NET
Zitat:
Records machen in .Net nur da Sinn, wo man
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:
Delphi-Quellcode:
Wobei du hier aufpassen musst. .Net ist wirklich type safe: Du kannst nicht die Königin auf Int boxen. ;)
DeinTyp(deineListe[0]).DoSomething();
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 01:33 Uhr. |
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