c#退出循环后所有列表项都会重置,
我有一个9,9矩阵,我想检查哪里有0,如果我找到一个0,我会创建一个11大小的数组,其中包含0(i和j)和1-9数字的位置 这将被添加到列表中,它将找到下一个0 add和soo onc#退出循环后所有列表项都会重置,,c#,arrays,list,C#,Arrays,List,我有一个9,9矩阵,我想检查哪里有0,如果我找到一个0,我会创建一个11大小的数组,其中包含0(i和j)和1-9数字的位置 这将被添加到列表中,它将找到下一个0 add和soo on public static void CheckandCreate() { int[] sector = new int[11]; //setting the array to 1-9 for (int i = 2; i < sector.Le
public static void CheckandCreate()
{
int[] sector = new int[11];
//setting the array to 1-9
for (int i = 2; i < sector.Length; i++)
{
sector[i] = i - 1;
}
//looking for 0
for (int i = 0; i < suduku.GetLength(0); i++)
{
for (int j = 0; j < suduku.GetLength(1); j++)
{
//finding 0
if (suduku[i, j] == 0)
{
sector[0] = i;
sector[1] = j;
sectorlist.Add(sector);
Console.WriteLine("Found Empty on " + i + " " + j);
//check to see array
sectorprinter(sector);
//check to if the array is on list and also print from list(check)
sectorprinter(sectorlist[sectorlist.IndexOf(sector)]);
}
}
//check to see if its still keeps the same value as before,this is where it failes!
Console.WriteLine();
sectorprinter(sectorlist[3]);
Console.WriteLine();
}
Console.WriteLine(sectorlist.Capacity);
Console.WriteLine();
}
出什么事了 执行此操作时:
sectorlist.Add(sector);
它添加了对扇区
数组的引用,而不是数组的副本。由于您随后修改了该数组,它还将修改您添加到扇区列表中的数组,因为它们是相同的数组
要解决此问题,请复制阵列并将副本添加到扇区列表中
:
sectorlist.Add(sector.ToArray());
我并不是说你的代码在修改后会正常工作,但它至少会修复那个特定的bug
除此之外,我建议在调试器中单步执行代码。执行此操作时:
sectorlist.Add(sector);
它添加了对扇区
数组的引用,而不是数组的副本。由于您随后修改了该数组,它还将修改您添加到扇区列表中的数组,因为它们是相同的数组
要解决此问题,请复制阵列并将副本添加到扇区列表中
:
sectorlist.Add(sector.ToArray());
我并不是说你的代码在修改后会正常工作,但它至少会修复那个特定的bug
除此之外,我建议在调试器中单步执行代码。您是否尝试过在调试器中单步执行代码?至少描述一下您已经探索过的所有方法,以及为什么在那次真诚的努力之后,您仍然感到困惑。您是否尝试过在调试器中单步执行代码?至少描述一下您已经探索过的所有途径,以及为什么在那次真诚的努力之后,您仍然感到困惑。