Referenz auf eine List, aber wie?



  • und genau das verwirrt mich
    auch wenn man zwei mal new schreibt - dann muesste das ergebnis doch da selbe sein - das zweite new war dann doch einfach nur ueberfluessig aber zerstoert nichts

    ListClass list = createNewList();
    ListClass listRef = list;
    
    ListClass list = createNewList();
    ListClass listRef = createNewList();
    listRef = list;
    

    beides ist doch identisch



  • Ist ja auch so. Das Problem hier ist nur, dass nach der letzten Zeile

    listRef = list;
    

    bei mir noch das hier kommt:

    listRef = createNewList();
    

    Mit dem ich eigentlich erreichen will, dass listRef = createNewList = list ist, was aber natürlich nicht der Fall ist, da listRef sich dann auf einen neuen, von createNewList angelegten Speicher bezieht.

    PS: Bitte jetzt nicht meinen Post auf der vorherigen Seite übersehen 😉



  • Mr Evil schrieb:

    und genau das verwirrt mich
    auch wenn man zwei mal new schreibt - dann muesste das ergebnis doch da selbe sein - das zweite new war dann doch einfach nur ueberfluessig aber zerstoert nichts

    ListClass list = createNewList();
    ListClass listRef = list;
    
    ListClass list = createNewList();
    ListClass listRef = createNewList();
    listRef = list;
    

    beides ist doch identisch

    Ja, korrekt. Aber kommt eben dann drauf an, welches Objekt man jetzt beobachtet.
    Simon



  • @veryxRV
    ist das nicht ein falsches design ?
    ich wuerde erwarten das CreateNewList das macht was es sagt - es erstellt eine _neue_ liste
    wenn ich CreateNewList aufrufen wuerde , und ich bekaehme eine referenz auf eine bereits vorhandene - wuerd ich mich wundern
    und wenn du den code nach einer weile liest und sich eine andere liste unerwartet aendert - dann debugge das mal

    wie waers mit

    List<object> GetOrCreateList(List<object> oldList)
    {
        return (oldList == null) ? CreateNewList() : oldList;
    }
    
    List<object> list = CreateNewList();
    List<object> listRef = GetOrCreateList(list);
    


  • Um genau zu sein, sieht das ganze so aus:

    listRef = createNewList(listRef) //Ordnet listRef neu anhand der Reihenfolge einer Liste in der GUI und gibt sie dann zurück.
    

    Zuvor gibt es zwei Modelle (Listen) list1 und list2. Auf welche der beiden sich listRef beziehen soll, entscheidet der Code dynamisch. Deswegen beharre ich auch immer darauf, dass alle Änderungen über listRef vorgenommen werden, da ich nicht weiß, auf welche der beiden Listen list1 und list2 sich listRef während der Laufzeit beziehen wird.



  • auch dann wuerd ich sagen => design fehler

    CreateNewList sortiert nur die parameter list ?
    eine sortierte liste ist doch keine neue liste

    dann ist entweder
    List.Sort zu verwenden oder
    SortList(List) zu erstellen

    am sonsten - irgendwo
    listRef = toUseList;
    zu schreiben duerfte doch eigentlich kein problem sein


Anmelden zum Antworten