Operator "="

01/02/2008 - 11:51 von Anselm | Report spam
Hallo,

habe lange gesucht nach einem Fehler in meinem Projekt. Am Schluß hab ich
ihn gefunden, nur weiß ich nicht, wie ich ihn ausmerzen soll:

Habe eine "Structure", außerdem mehrere Male "Dim as dieses Ding" (im
Prinzip ein großes Array)
Gleich am Anfang beim Starten erhàlt eines dieser Arrays eine ganze Menge
Werte, und àhnliches, und es soll sich dann nicht àndern, so wie eine
Konstante. Ich wollte sogar eine Konstante machen anstatt eine Variable;
aber das ging nicht.

In der weiteren Phase des Programm-Ablaufs wird zunàchst ein anderes Array
diesem ersten gleichgesetzt, sowas wie
zweitesArr = erstesArr
im zweitesArr àndern sich dann manchmal verschiedene Werte.

Nun mein Problem: sie àndern sich auch im erstesArr!
Sollen sie aber nicht!

Da habe ich wohl den "="-Operator falsch eingesetzt? (Im VBA benütze ich oft
so was, wie "set"; gibt's das hier nicht?)

Um Hilfe dankbar!!
Anselm
 

Lesen sie die antworten

#1 Armin Zingler
01/02/2008 - 12:28 | Warnen spam
"Anselm" schrieb
Hallo,

habe lange gesucht nach einem Fehler in meinem Projekt. Am Schluß
hab ich ihn gefunden, nur weiß ich nicht, wie ich ihn ausmerzen
soll:

Habe eine "Structure", außerdem mehrere Male "Dim as dieses Ding"
(im Prinzip ein großes Array)
Gleich am Anfang beim Starten erhàlt eines dieser Arrays eine ganze
Menge Werte, und àhnliches, und es soll sich dann nicht àndern, so
wie eine Konstante. Ich wollte sogar eine Konstante machen anstatt
eine Variable; aber das ging nicht.

In der weiteren Phase des Programm-Ablaufs wird zunàchst ein anderes
Array diesem ersten gleichgesetzt, sowas wie
zweitesArr = erstesArr
im zweitesArr àndern sich dann manchmal verschiedene Werte.

Nun mein Problem: sie àndern sich auch im erstesArr!
Sollen sie aber nicht!

Da habe ich wohl den "="-Operator falsch eingesetzt? (Im VBA benütze
ich oft so was, wie "set"; gibt's das hier nicht?)

Um Hilfe dankbar!!




Ich vermute, du weist einer Array-Variablen ein Array zu. Da Arrays
Referenztypen sind, d.h. die Variable enthàlt einen Verweis
(Speicheradresse) auf das Array, wird bei der Zuweisung die Referenz
kopiert. Somit verweisen zwei Variablen auf /dasselbe/ Array. Der
Inhalt des Arrays kann nun über die eine oder die andere Variable
geàndert werden.

Wenn du den Inhalt eins Arrays kopieren willst, rufe die Clone-Methode
auf. Beispiel:

Dim i, j As Integer()

ReDim i(0)

i(0) = 17
j = DirectCast(i.Clone, Integer())
j(0) = 2

MsgBox(i(0))

Die msgbox gibt 17 aus, d.h. die Variablen i und j verweisen auf
verschiedene Arrays.

Beachte: Sollte der Typ der Elemente im Array ein Wertetyp (z.B. Integer
wie im Beipiel, oder eine Structure) sein, dann werden diese kopiert.
Ist der Typ hingegen ein Referenztyp, dann werden auch nur die
Referenzen kopiert. Die referenzierten Objekte hingegen nicht.


Armin

Ähnliche fragen