Entwickler-Ecke

C# - Die Sprache - Hashtable


Nahasapee - Di 11.03.08 12:50
Titel: Hashtable
hi,
ich glaub, ich sehe den wald vor lauter bäumen nicht zur zeit ;)

mein porblem :

ich erzeuge nen HashTable

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
tHashTable = new Hashtable();   
tHashTable.Add("irgendeinKey"new String[2]{"irgendwas""irgendwas2"});
...
später möchte ich drauf zu greifen 
das hatte ich mir so gedacht:
...
foreach (object key in tHashTable.keys)
{
   writeln(tHashTable[key][0]);
   writeln(tHashTable[key][1]);
}
...

da meckert allerdings der compiler rum:
Zitat:
Fehler 1 Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "object" angewendet werden.
C:\Workspace_C#\ConsoleApplication1\ConsoleApplication1\WordXmlHandler.cs 74 42 ConsoleApplication1

was muss ich das objekt erst wieder casten in ein string[], wenn ja wie geht das ?;)
oder muss ich irgend was ganz anderes maceh?
lg christian



Moderiert von user profile iconTino: C#- & Quote-Tags hinzugefügt


JüTho - Di 11.03.08 13:19
Titel: Re: Hashtable
Hallo Christian,

ein Blick in die SDK-Doku und Übernahme der dortigen Beispiele erübrigt viele Fragen und Probleme.
user profile iconNahasapee hat folgendes geschrieben:
was muss ich das objekt erst wieder casten in ein string[], wenn ja wie geht das ?;)
oder muss ich irgend was ganz anderes maceh?

Wenn Du ein object hast und als string benutzen willst, musst Du IMMER eine Typverwandlung benutzen. (Teilweise macht NET das automatisch, aber nicht allgemein.)

Aber das Beispiel unter Hashtable-Klasse zeigt, dass es auch einfacher geht:

C#-Quelltext
1:
2:
      foreach ( DictionaryEntry de in myHT )
         Console.WriteLine("\t{0}: \t{1}", de.Key, de.Value);

Außerdem hast Du mit Dictionary<string, T> noch eine schöne Alternative.

Jürgen


Nahasapee - Di 11.03.08 13:27

Hi Jürgen,
dieses Beispiel aus derSDK hatte ich auch schon versucht
allerdings, wenn ich auf das
de.Value Objekt zugreifen will bekomme ich die gleiche Fehlermeldung
also
de.Value[0]
da ich ja ein new String[]{" "," "} rein gespeichert hatte
danke für die antwort
lg christian


Th69 - Di 11.03.08 13:31

Du kannst das Casten gleich in der foreach-Schleife vornehmen:

C#-Quelltext
1:
2:
3:
4:
5:
foreach(string[] strings in tHashTable.Values) // wenn dich nur die Werte interessieren
{
  writeln(strings[0]);
  writeln(strings[1]);
}


Ab .NET 2.0 würde ich aber die Generics (z.B. Dictionary<T, U>) benutzen, dann brauchst du nicht mehr explizit zu casten.


Nahasapee - Di 11.03.08 13:53

perfekt danke :)
lg