2017-04-09 7 views
0

Ich habe eine Frage zum Speichern von vielen Arrays in einer Liste.Speichern von vielen Arrays in einer Liste auf jeder Schleife

Zuerst initialisiert I das Array und die Liste:

int[] arr = new int[9]; 
List<int[]> forkarr = new List<int[]>(); 

dann betreibe ich durch eine Menge von für Schleifen und modifizieren, um die Anordnung jedes Mal, um alle möglichen Tic Tac Toe-Variationen zu erzeugen. Beim Durchlaufen all dieser Variationen, wenn das Array ein mögliches Board ist, dann drucke ich es, und zusätzlich, wenn das Array bestimmte Kriterien erfüllt, um ein "Fork" zu sein, füge ich es der Liste folgendermaßen hinzu:

if (ForkCheck.fork(arr)) { forkarr.Add(arr); Console.WriteLine("It's a Fork!");} 

, die auch diese Nachricht druckt, die Ihnen mitteilt, dass ein bestimmtes Array ein Fork ist.

Jetzt, wenn ich alle Arrays drucke, werden diejenigen, die Gabeln sind, richtig gedruckt und als solche gekennzeichnet.

Allerdings, wenn ich gehen alle der int [] Elemente meiner Liste forkarr auszudrucken wie so:

foreach (int[] arry in forkarr) 
      { 
       PrintGame.print(arry);//this is my method that prints the array 
       Console.WriteLine(); 
      } 

aus irgendeinem Grund jedes Array wird ein identisches:

222 
222 
222 

(Ich benutze 2 als 'X' und 1 als 'O' und 0 als 'leer' btw)

Und es druckt das immer und immer wieder für alle Gabeln.

So etwas läuft falsch, wenn ich jede Änderung des Arrays als ein neues Element in der Liste hinzufügen, denke ich, aber ich bin mir nicht sicher warum.

Danke für jede Hilfe.

Antwort

1

Weil Sie das gleiche Array ändern und es der Liste hinzufügen. Jedes Mal, wenn Sie mit einem Array Array getan Sie brauchen eine neue Instanz wie diese zu erstellen:

arr = new int[9]; 

Dies wird eine neue Referenz erstellen, die von anderen Arrays unabhängig sein wird. Und das Ändern seiner Elemente beeinflusst die anderen nicht.

Weitere Informationen zum Wert vs Referenztypen, die Sie auf die unten stehende Frage beziehen:

What is the difference between a reference type and value type in c#?

+0

vielen Dank! Ich dachte, es wäre etwas Einfaches – Schweeb

Verwandte Themen