2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
432
432
EMPFEHLEN
-
Hallo,
ich bin gerade etwas verwirrt.
Wenn ich versuche eine List<T> oder einen Stack<T> an eine andere Methode zu übergeben, dann macht er das zwar, aber IMMER als Referenz. Sprich ändere ich die Liste oder den Stack innerhalb der aufgerufenen Methode, dann ändert er sich auch in der aufrufenden Methode...
Ist das normal ? Ich dachte immer ich muss beim Übergeben als eine Methode das Schlüsselwort "ref" angeben damit er es als Referenz angibt, das tue ich aber gar nicht....
Wo ist der (Denk-)Fehler ?
Grüße
-
09.02.11 15:18 #2
- Registriert seit
- Apr 2009
- Ort
- Düsseldorf (NRW)
- Beiträge
- 508
Hi,
hier eine kurze, knackige Erklärung..
Da sowohl die List als auch der Stack ein Referenztyp sind, werden die Referenzen als Wert übertragen.. relativ verwirrend.
Best regards
-
Hey,
danke für die Antwort.
Das führt mich direkt zum nächsten Problem, weil nun muss ich den Stack in der aufgerufenen Methode ja kopieren, damit ich mit einer Kopie arbeiten kann.
Versucht hab ichs so:
Code csharp:1 2 3 4
public void doSomething(Stack<Node> _myStack) { Stack<Node> copyStack = new Stack<Node>(_myStack); }
Der neue Stack steht aber auf dem Kopf. Hab auch herausbekommen das es an dem IEnumerable liegt, weil der Konstruktor von Stack keinen Stack erwartet sondern ein IEnumerable.
Nur wie kopiere ich denn nun einen Stack ? Clone() geht nicht da ich auf .NET 3.5 angewiesen bin...
Grüßle
-
09.02.11 15:46 #4
- Registriert seit
- Apr 2009
- Ort
- Düsseldorf (NRW)
- Beiträge
- 508
Hi,
das liegt wohl daran, dass du einen Stack kopieren willst
Bei einem Stack kannst du nur das oberste Element lesen. Der IEnumarator wird das genauso tun, bis der Stack leer ist und die Elemente in den neuen Stack in dieser (verkehrten) Reihenfolge kopieren. Die simpelste Lösung, die mir an dieser Stelle einfällt wäre, den Vorgang ein zweites mal zu wiederholen.
Allerdings kennt vlt. jemand, der sich besser mit .NET auskennt, eine bessere Vorgehensweise.
Best regards
-
Hey,
hab festgestellt es gibt eine Reverse<> Methode, denke damit kann ichs wieder umbiegen. Hab nur noch nicht rausbekommen wie sie funktioniert, aber so viele Möglichkeiten kanns ja nicht geben. Obs schön ist sei jetzt mal dahingestellt
Grüßle
-
Die Clone-Methode gibt es aber doch auch in .Net v3.5.
hihi = -h²
-
-
Was willst du denn Klonen? Die Objekte im Stack oder nur den Stack, aber mit Verweis auf die selben Instanzen?
hihi = -h²
-
Hallo,
ich übergebe einen Stack an eine andere Methode, diese macht mit dem Stack etwas. Dadurch das ein Stack aber als Referenz übergeben wird, ändert er sich auch in der aufrufenden Methode. Das will ich aber nicht, also muss ich ihn kopieren, dazu müsste es dann aber eine richtige Kopie sein.
Im Moment mach ichs jetzt so....weil ichs anders einfach nicht hinbekommen:
Code csharp:1 2 3 4 5 6 7 8 9 10
public bool checkForEql(Stack<Node> _myStack) { Stack<Node> copyStack = new Stack<Node>(); Node[] tmpArr = _myStack.ToArray(); for(int i = tmpArr.Length - 1; i >= 0; i--) { copyStack.Push(tmpArr[i]); } //Do Something }
Geht zwar, aber gefallen tuts mir nicht...
Ähnliche Themen
-
Stacks, wie schreibt man es richtig in C?
Von tdkpaul im Forum C/C++Antworten: 7Letzter Beitrag: 03.02.10, 11:45 -
Irc listen
Von azubi2 im Forum .NET Web und KommunikationAntworten: 3Letzter Beitrag: 25.10.05, 09:49 -
Zuweisung der Adresse im Heap bei Stacks
Von Razorhawk im Forum C/C++Antworten: 5Letzter Beitrag: 11.10.05, 22:17 -
DLL Listen- Absturz, Listen übergeben
Von haemmer im Forum C/C++Antworten: 0Letzter Beitrag: 05.02.04, 21:00





Zitieren
Login





