【发布时间】:2018-01-18 00:28:32
【问题描述】:
有一个数组和一个相同类型的列表。在一个循环中,我更改数组,并在每次更改后将其添加到列表中(在循环结束时,我想获取由更改产生的所有数组的列表)。但是当列出所有元素相同时,它们与添加到列表中的最后一个数组相同。为什么会这样?
byte[,] mat = new byte[3, 3];
List<byte[,]> list = new List<byte[,]>();
for (int m = 0; m < 9; ++m)
{
byte i = 0;
byte j = 0;
// Search for an empty cell (zero)
bool flag = false;
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 3; ++j)
if (mat[i, j] == 0)
{
flag = true;
break;
}
if (flag) break;
}
// Adding a changed array to the list
mat[i, j] = 1;
list.Add(mat);
// List all items in the list
foreach (byte[,] a in list)
{
PrintMatrix(a);
}
}
【问题讨论】:
-
mat[i,j] = 1;应该在您的flag = true;之前吗?您总是将 0,0 位置设为 1,因为 i 和 j 在您的 for 循环之外没有改变。 -
不是答案,但我可以强烈建议您不要命名列表
list吗?mats?listMats?matList?
标签: c# arrays list collections