Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Algorithmen (http://www.informatikerboard.de/board/board.php?boardid=17)
----- C# Liste kopiert sich außerhalb von Schleife immer wieder (http://www.informatikerboard.de/board/thread.php?threadid=3598)


Geschrieben von C not so sharp am 24.05.2017 um 16:18:

  C# Liste kopiert sich außerhalb von Schleife immer wieder

Hallo,

ich hätte da eine Frage zu Listen in C#.

Und zwar wollte ich die Liste "sorted" in Liste "Kopie" kopieren.
Dann, wenn die if-Abfragen passen, Elemente aus "Kopie" löschen. Die Liste "sorted" wurde aber auch immer kürzer.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:

List<Point> Kopie = new List<Point>();
            
            Kopie = sorted;
            
            for (int i = 0; i < points.Count - 1; i++)
            {

                richTextBox1.AppendText(Environment.NewLine +  sorted[i] + Kopie[i]);
            }

            Point Links = new Point();
            Point Rechts = new Point();
            Point Oben = new Point();
            Point Unten = new Point();

            
            for (int i = 0; i < sorted.Count;i++)
            {
                
                Links =Punkt1;
                Rechts =Punkt2;
                Oben  =Punkt3;
                 Unten.X =Punkt4;
                
              
                if (Kopie.Contains(Links)==true || Kopie.Contains(Rechts) == true || Kopie.Contains(Oben) == true || Kopie.Contains(Unten) == true)
                {
                    Punkt = sorted[i];
                    Kopie.Remove(Punkt);
                    richTextBox1.AppendText(Environment.NewLine + "Löschen" + ": " + sorted[i] + "Count: " + sorted.Count);
                    
                }

                else
                {
                    
                    ecken.Add(sorted[i]);
                    richTextBox1.AppendText(Environment.NewLine + "Treffer" + ": " + sorted[i]);

                }
                
            }



Ich habe dann
code:
1:
2:
3:
Kopie = sorted;


durch
code:
1:
2:
3:
4:
5:
6:
7:
for(int i =0; i <sorted.Count;i++)
            {
                Kopie.Add(sorted[i]);

            }


ersetzt. Und es läuft wie gewünscht.

Aber ich verstehe nicht warum der Kopiervorgang, der ja außerhalb der Schleife steht, innerhalb der Schleife durchgeführt wird.

Könnte mir das jemand erklären? smile



Geschrieben von eulerscheZahl am 26.05.2017 um 21:21:

 

Du hast nicht wirklich zwei verschiedene Listen, sondern nur zwei Verweise auf die selbe Liste.
Wenn du eine wirklich neue Liste haben willst: List<Point> Kopie = new List<Point>(sorted);


Forensoftware: Burning Board, entwickelt von WoltLab GmbH