Entwickler-Ecke

C# - Die Sprache - Hashes zur Laufzeit benennen


pacy - Mo 14.04.08 19:56
Titel: Hashes zur Laufzeit benennen
hallo *,

ich würde gerne zur laufzeit hashes anlegen, allerdings bekomme ich die key's der hashes auch erst zur laufzeit.
die infos dazu kommen aus einer xml datei, hier ein auszug:


XML-Daten
1:
2:
3:
<FIELD NAME = "sym" TYPE = "string"  VALUE = "30" />
<FIELD NAME = "del" TYPE = "bool"           />
<FIELD NAME = "mod" TYPE = "date"           />


daraus würde ich gerne folgendes gebilde generieren:

erster hashes:
key: sym
value: verweis auf nächsten hash

nächster hash:
key: string
value: 20

usw.

d. h. aus der xml datei soll ein hash generiert werden. dieser hash soll als key werte jeweils die NAME attribute besitzen, als value dann eine referenz auf weitere hashes, deren key immer aus dem attribut TYPE besteht und deren value immer dem attribut VALUE entspricht (oder 0, wenn VALUE nicht angegeben ist).

ich hoffe ich konnte das einigermaßen verständlich ausdrücken.

mein bisheriger code sieht so aus:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            for (int i = 0; i < objectList.Count; i++)                                      // This gets the count of all objects and iterate over it
            {
                Hashtable objectFieldHash = new Hashtable();
                objectHash.Add(objectList.Item(i).Attributes.Item(0).Value,
                    objectFieldHash);
                Console.WriteLine(objectList.Item(i).Attributes.Item(0).Value);

            }


das problem dabei ist: das bei jedem durchgang immer wieder objectFieldHash genommen wird und daher die werte immer wieder überschrieben werden. im vorfeld genügend hashes generieren kann ich aber nicht, weil die genau benötigte anzahl ja erst beim einlesen bekannt wird,

weiß da jemand von euch abhilfe?

danke schonmal!

gruß pacy

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


JüTho - Di 15.04.08 10:16

Hallo,

Dein konkretes Problem habe ich nicht verstanden; aber das sollte egal sein. Ich kann keinen Grund sehen, warum Du die Hashtable nicht vor der Schleife erstellst. Im Gegensatz zu einem Array hat eine Hashtable eine variable Größe, kann also jederzeit per Add() verändert werden.

Außerdem hast Du verschwiegen, von welchem Typ objectHash ist (ebenfalls eine Hashtable?). Sollen dort wirklich ganze Hashtables registriert werden?

Übrigens entspricht ab NET 2.0 Hashtable nicht mehr dem "Stand der Dinge"; stattdessen ist Dictionary<TKey, TValue> zu empfehlen. Jürgen