Autor Beitrag
Nahasapee
Hält's aus hier
Beiträge: 3



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

mein porblem :

ich erzeuge nen HashTable
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 11.03.08 13:19 
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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4803
Erhaltene Danke: 1060

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 11.03.08 13:31 
Du kannst das Casten gleich in der foreach-Schleife vornehmen:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 11.03.08 13:53 
perfekt danke :)
lg