在每个循环中将大量数组存储到List中

时间:2017-04-09 19:51:33

标签: c# arrays list

我有一个关于将大量数组存储到列表中的问题。

首先,我初始化数组并列出:

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

然后我经历了很多for循环并且每次修改数组以便产生所有可能的tic tac toe变化。在循环遍历所有这些变化时,如果数组是一个可能的板,那么我打印它,另外如果数组满足某个'fork'的标准,那么我将它添加到列表中,如下所示:

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

还打印该消息,让您知道特定数组是一个分支。

现在,当我打印所有数组时,正确打印的那些数组并标记为这样。

但是,当我打印出列表fork的所有int []元素时,如下所示:

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

由于某种原因,每个数组变得相同:

222
222
222

(我使用2作为'X',1作为'O',0作为'空'btw)

它只是为所有的叉子一遍又一遍地打印出来。

因此,当我将数组的每个修改添加为列表中的新元素时,我认为会出现问题,但我不确定原因。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

因为您正在修改同一个数组并将其添加到列表中。每次使用一个数组数组时,都需要创建一个新实例,如下所示:

arr = new int[9];

这将创建一个独立于其他数组的新引用。修改它的元素不会影响其他元素。

有关值与引用类型的更多信息,请参阅以下问题:

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