Laden...

Hashtable und Referenzvalues

Erstellt von antoschka vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.019 Views
A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren
Hashtable und Referenzvalues

Hallo,

ich bin gerade am Verzweifeln.

Habe eine Hashtable und möchte mit Add(key,object) Werte hinzufügen.
Das ganze Läuft in einer for each.

foreach(MyEntity myEnity in MyEntities)
{
myHashtable.Add(myEntityId, myEntity);
}

Nehmen wir an MyEntities hat 4 Objekte.
jetzt werden brav vier Einträge in die Hashtable geschrieben, jedoch wird bei jedem Durchlauf die myEntity-Objekte aller anderen Einträge auf das aktuelle myEnitity-Objekt geändert.
Wie kann ich die jeweiligen Enitities unter dem entsprechenden Schlüssel speichern, ohne dass alle auf den gleichen Wert (nämlich auf den Wert des letzten Durchlaufs) gespeichert werden?

Besten Dank im Voraus für Eure Hilfe

antoschka

Gelöschter Account
vor 15 Jahren

in deinem code änderst du den key nicht.
unter anderem sollte man ab framework 2.0 lieber ein dictionary nehmen.

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

Sorry, habe den punkt vergessen:

Muss natürlich heißen:

foreach(MyEntity myEnity in MyEntities)
{
myHashtable.Add(myEntity.Id, myEntity);
}

Das mit dem Dictionary probier ich mal... Nichts desto trotz, warum klappt das denn mit der Hashtable nicht??

Vielen für Euer Feedback

antoschka

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

Mit Dictionary gibts das gleiche Problem!

Gelöschter Account
vor 15 Jahren

a: steht in myentities wirklich das drinn was dort stehen soll oder liegt der fehler bereits im sourcearray?
b: verwendest du einen eigenen enumerator?

B
114 Beiträge seit 2007
vor 15 Jahren

Debug halt mal rein, dann siehst du wo es hängt.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo antoschka,

da du selber schon die Referenzvariablen ansprichst. Wenn in MyEntities vier Unterschiedliche Objekte enthalten sind und diese Objekte unterschiedliche Ids haben, dann sollte es klappen. Wenn in MyEntities dagegen vier mal die gleiche Referenz enthalten ist, bekommst du den beschriebenen Fehler.

Du solltest Dictionary nehmen, auch wenn das bezüglich es Fehlers natürlich nichts ändert.

herbivore

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren
Soory - Gelöst

Hallo,

Oh man habe einen ganz fiesen Fehler gemacht und nicht entdeckt. Das Beispiel war wesentlich komplexer und hatte eine Anweisung drin die abstrahiert aufs Wesentliche ungefähr so aussieht.

foreach(MyEntity myEnity in MyEntities)
{
myHashtable.Add(myEntity.Id, otherValue ?? myEntity);
}

Beim Drüberlesen bin ich immer davon ausgegangen, dass otherValue = null ist und myEntity genommen wird. leider war otherValue aber initialisiert und dementsprechend nicht null.

Schande über mich, dass ich Euch mit dem Zeug belästigt habe 🙁

Beste Grüße und vielen Dank trotzdem fürs Lesen

antoschka