none
Merkwürdiges Verhalten beim Zuweisen eines Arrays zu einer Liste RRS feed

  • Frage

  • Hallo,

     

    ich habe hier ein Problem, welches ich nicht richtig verstehe:

    Ich möchte eine Liste mit einem StringArray erstellen. Ich erstelle mir ein Array, weise dieses der Liste mit ADD() zu, belege das Array mit neuen Werten und schreibe dieses Array dann auch in die Liste. Wenn ich mir dann den Inhalt der Liste betrachte, haben alle Listeneinträge den Inhalt, den ich zuletzt dem Array zugwiesen haben.

    string[] ARRAY = new string[2];
    List<string[]> LISTE = new List<string[]>();
    
    ARRAY[0] = "A";
    ARRAY[1] = "B";
    LISTE.Add(ARRAY);
    
    ARRAY[0] = "C";
    ARRAY[1] = "D";
    LISTE.Add(ARRAY);
    

    In diesem Beispiel steht jetzt in beiden Listeinträgen "C", "D". Kann mir jemand diese Erscheinung erklären? Wie funktioniert eine solche Zuweisung richtig?

     

     

    Danke Rico

    Dienstag, 14. September 2010 11:40

Antworten

  • Hallo Rico

    dein 'ARRAY' ist immer dieselbe Instanz (und ein Verweistyp), mit
      ARRAY[0] = "C";
      ARRAY[1] = "D";
    überschreibst du den vorherigen Inhalt ("A"/"B") des Arrays.
    Insofern hat dein Problem mit der LISTE eigentlich nichts zu tun.

    Lösung wäre rein technisch:
      ARRAY = new string[2];   // neue (zweite) Instanz!
      ARRAY[0] = "C";
      ARRAY[1] = "D";
    was aber evtl auch nicht unbedingt deinem Ziel entspricht.
    • Als Antwort markiert Rico Fiedler Dienstag, 14. September 2010 12:14
    Dienstag, 14. September 2010 11:49

Alle Antworten

  • Hallo Rico

    dein 'ARRAY' ist immer dieselbe Instanz (und ein Verweistyp), mit
      ARRAY[0] = "C";
      ARRAY[1] = "D";
    überschreibst du den vorherigen Inhalt ("A"/"B") des Arrays.
    Insofern hat dein Problem mit der LISTE eigentlich nichts zu tun.

    Lösung wäre rein technisch:
      ARRAY = new string[2];   // neue (zweite) Instanz!
      ARRAY[0] = "C";
      ARRAY[1] = "D";
    was aber evtl auch nicht unbedingt deinem Ziel entspricht.
    • Als Antwort markiert Rico Fiedler Dienstag, 14. September 2010 12:14
    Dienstag, 14. September 2010 11:49
  • Hallo Rico,

    ich hatte das selbe problem bis ich simpler gedacht hatte.

            Dim arraylist As New List(Of String())
            arraylist.Add({"100", "109"})
            arraylist.Add({"186", "0"})
            arraylist.Add({"215", "0"})
            arraylist.Add({"216", "0"})

    Meine Lösung ist in VB.NET, in C# habe ich es leider nicht geschaft, dürfte abe kein Problem sein.

    Ich antworte dir erst jetzt da ich selbst nach einer Lösung gesucht habe, aber selbst darauf gekommen bin.


    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter

    Mittwoch, 14. August 2013 10:03