tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Tim Bureck
  • 1 Beitrag von Tim Bureck
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
432
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    lara86 lara86 ist offline Mitglied
    Registriert seit
    May 2009
    Beiträge
    21
    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
     

  2. #2
    Tim Bureck Tim Bureck ist offline Mitglied Platin
    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
    lara86 bedankt sich. 

  3. #3
    lara86 lara86 ist offline Mitglied
    Registriert seit
    May 2009
    Beiträge
    21
    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
     

  4. #4
    Tim Bureck Tim Bureck ist offline Mitglied Platin
    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
    lara86 bedankt sich. 

  5. #5
    lara86 lara86 ist offline Mitglied
    Registriert seit
    May 2009
    Beiträge
    21
    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
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Die Clone-Methode gibt es aber doch auch in .Net v3.5.
     
    hihi = -h²

  7. #7
    lara86 lara86 ist offline Mitglied
    Registriert seit
    May 2009
    Beiträge
    21
    Zitat Zitat von Shakie Beitrag anzeigen
    Die Clone-Methode gibt es aber doch auch in .Net v3.5.
    Tatsächlich, da hat mir MSDN einen Streich gespielt.
    Aber implementiert krieg ichs nicht. Ich muss doch dann meiner Klasse die IClonable Schnittstelle zufügen und Clone() selber implementieren, oder ?
     

  8. #8
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Was willst du denn Klonen? Die Objekte im Stack oder nur den Stack, aber mit Verweis auf die selben Instanzen?
     
    hihi = -h²

  9. #9
    lara86 lara86 ist offline Mitglied
    Registriert seit
    May 2009
    Beiträge
    21
    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

  1. Stacks, wie schreibt man es richtig in C?
    Von tdkpaul im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 03.02.10, 11:45
  2. Irc listen
    Von azubi2 im Forum .NET Web und Kommunikation
    Antworten: 3
    Letzter Beitrag: 25.10.05, 09:49
  3. Zuweisung der Adresse im Heap bei Stacks
    Von Razorhawk im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 11.10.05, 22:17
  4. DLL Listen- Absturz, Listen übergeben
    Von haemmer im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 05.02.04, 21:00