WinFuture-Forum.de: C# Array In Hashtable - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C# Array In Hashtable Kann nicht auf das Array zugreifen


#1 Mitglied ist offline   karl0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 386
  • Beigetreten: 25. März 06
  • Reputation: 4

geschrieben 25. Juli 2009 - 13:57

Hallo alle zusammen. Ich habe ein Problem^^

Ich habe in c# eine Hashtable mit 7 Keys

6 der 7 Keys sind Double werte und einer ist ein Array mit 3 weiteren Hashtables drin.

Hashtable
key1 = double
key2 = double
key3 = double
key4 = double
key5 = double
key6 = double

key7 = Array [0] = Hashtable key1 = double
key7 = Array [0] = Hashtable key2 = double
key7 = Array [0] = Hashtable key3 = double

key7 = Array [1] = Hashtable key1 = double
key7 = Array [1] = Hashtable key2 = double
key7 = Array [1] = Hashtable key3 = double

key7 = Array [2] = Hashtable key1 = double
key7 = Array [2] = Hashtable key2 = double
key7 = Array [2] = Hashtable key3 = double


Das erstellen hat wunderbar geklappt, bei den Lokalen Variabeln ist diese Hashtable so aufgeführt, wie ich sie benötige, ABER,
ich kann nicht auf die Werte im Array zu greifen :)
Ich würde es ja so machen
Hashmap["key7"][0]["key1"]

um den Wert zu bekommen.
Bei dem Array spuckt er mir aber schon den Fehler aus.

Zitat

newTable["key1"][0] Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "object" angewendet werden.


Erstellt habe ich das ganze so.

Hashtable newTable = new Hashtable(); // das ist die erste Hashtable
Hashtable[] decks = new Hashtable[3];  // das ist das Array

Hashtable deck1Table = new Hashtable();  //Hashtable für Deck 1
Hashtable deck3Table = new Hashtable();  //Hashtable für Deck 3
Hashtable deck5Table = new Hashtable();  //Hashtable für Deck 5

decks[0] = deck1Table;
decks[1] = deck3Table;
decks[2] = deck5Table;
newTable.Add("Decks", decks);



Vllt kann mir da jemand helfen?

MfG Karl0
Du bist die Nr. 1 - BLUE!!
0

Anzeige

#2 Mitglied ist offline   mibtng 

  • Gruppe: aktive Mitglieder
  • Beiträge: 298
  • Beigetreten: 03. Juni 05
  • Reputation: 0

geschrieben 25. Juli 2009 - 14:06

Ehrlich gesagt versteh ich deinen Code / den Sinn nicht ganz.

Aber vermutlich musst du dir mit einem Type-Cast behelfen...
((korrekterTyp)newTable["key1"])[0]["key1"]

Oder vielleicht bietet es sich an, bei den Hashtables mit Generics zu arbeiten (-> Typ-sicher, keine Casts nötig)

Aber ehrlich gesagt habe ich nie wirklich mit Hashtables gearbeitet, verstehe aber auch nicht, was du da genau machen willst...
0

#3 Mitglied ist offline   karl0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 386
  • Beigetreten: 25. März 06
  • Reputation: 4

geschrieben 25. Juli 2009 - 14:20

Danke für die schnelle Antwort, vllt hilft es noch weiter, dass der Typ des Arrays in der Hashtable der folgende ist.

object {System.Collections.Array}
.

Wenn ich auf die Hashtable in dem Array zugreifen will
decks[0]["key1"]

funktioniert es ohne Probleme.
Wahrscheinlich kann eine Hashtable nix mit Listen anfangen.
------------------------------------

Evtl werde ich es gleich mal mit nem Dictonary versuchen.

Der Sinn dahinter ist folgender.

Ich schreibe für meinen Professor ein Programm welches in Delphi Vorhanden ist nach C#
und in dem Delphiprogramm ist diese Art auch gegeben.

Es ist ein Programm zu Berechnen von der Seelage einer Fähre. (Tieflage, Seitenlage, etc) und in dieser Hashtable stehen die Anzahl der Besucher (und durchschnittliches Gewicht) und in dem Array stehen die Fahrzeuge und Durchschnittsgewicht für jedes Deck der Fähre.

Ich probiere mal weiter aus und melde mich, wenn ich etwas gefunden habe.

MfG Karl0

EDIT:...................
Habe es jetzt mal mit folgendem Probiert.

HashTable -> Array
HashTable -> ArrayList

SortedList -> Array
SortedList -> ArrayList

Überall das gleiche Problem,

EDIT2:....................
hm, ich habe jetzt ne ganz böse verschachtelte SortedList, aber das ist nicht das Wahre.

Weiß niemand, wie man ganz simpel auf ein Array in einer Hashtable oder SortedList zugreifen kann?

Dieser Beitrag wurde von karl0 bearbeitet: 25. Juli 2009 - 16:33

Du bist die Nr. 1 - BLUE!!
0

#4 Mitglied ist offline   mibtng 

  • Gruppe: aktive Mitglieder
  • Beiträge: 298
  • Beigetreten: 03. Juni 05
  • Reputation: 0

geschrieben 25. Juli 2009 - 16:58

Der Hashtable sind doch die Typen, die du speicherst, egal...

Vielleicht hättest du einfach sagen sollen, dass du keinen blassen Schimmer hast, was ein Type-Cast geschweige denn Generics sind...
0

#5 Mitglied ist offline   karl0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 386
  • Beigetreten: 25. März 06
  • Reputation: 4

geschrieben 25. Juli 2009 - 18:19

Also dann probiere es doch mal selber aus :) aber von Generics habe ich wirklich keine Ahnung.
Wenn du damit meinst, den Typ vorher fest zu legen
Hashtable<keytyp,valuetyp>
Das funktioniert nicht, da ich ja 2 Valuetypen habe. (Habe ich probiert)

Das Casten habe ich auch probiert.
Dort wird aber nur das Objekt selber gecastet, Hashtable["key1"][0] aber die Objekte in dem Array kann ich trotzdem mit der selben Fehlermeldung nicht aufrufen.

Ob ich es doppelt Casten muss, habe ich nicht probiert.

(ArrayList)(Hashtable)Hashtable["key1"][0]



Aber ich bitte dich mit solchen Aussagen nicht im Ton zu vergreifen. Ich habe nur eine Frage gestellt und wollte deswegen nicht angemacht werden.

MfG Karl0

Dieser Beitrag wurde von karl0 bearbeitet: 25. Juli 2009 - 18:19

Du bist die Nr. 1 - BLUE!!
0

#6 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0

geschrieben 26. Juli 2009 - 12:54

Also wenn ich dein Problem korrekt verstehe, dürftest du mit diesen zwei Ausdrücken weiter kommen:
((Hashtable[])newTable["key7"])[0]
["key1"];
((ArrayList)newTable["key1"])[0];


Du musst beim Casting auch z.B. mit den Klammern deutlich machen, was du genau casten willst.

Viele Grüße,
Stefan

Dieser Beitrag wurde von Diewie bearbeitet: 26. Juli 2009 - 12:54

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0