我有一个关于将大量数组存储到列表中的问题。
首先,我初始化数组并列出:
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)
它只是为所有的叉子一遍又一遍地打印出来。
因此,当我将数组的每个修改添加为列表中的新元素时,我认为会出现问题,但我不确定原因。
感谢您的帮助。
答案 0 :(得分:1)
因为您正在修改同一个数组并将其添加到列表中。每次使用一个数组数组时,都需要创建一个新实例,如下所示:
arr = new int[9];
这将创建一个独立于其他数组的新引用。修改它的元素不会影响其他元素。
有关值与引用类型的更多信息,请参阅以下问题:
What is the difference between a reference type and value type in c#?