C# 在数组列表上使用 foreach 时,foreach 仅迭代 5 次,即使列表的长度为 86

C# When using foreach on a list of arrays, the foreach only iterates 5 times even though the list has length 86

我正在用 C# 编写国际象棋引擎,并且正在尝试调试着法生成。到目前为止,我一直在使用断点来检查变量,但我需要一种更好的调试方法。尽管断点显示此列表的长度为 86,但循环只运行了 5 次。我唯一能想到的是列表中的数组长度为 5,但我不知道是什么原因造成的。

foreach (int[] debugBoard in futures)
{

    for (int i = 0; i < 5; i++)
    {
        Debug.Write(debugBoard[i].ToString().PadLeft(3, ' '));
    }
    Debug.Write("\n");
    int[,] debugOutBoard = new int[8, 8];
    Array.Copy(chessBoard.Pieces(), debugOutBoard, 64);

    if (debugBoard[0] < 0 || debugBoard[1] < 0 || debugBoard[2] < 0 || debugBoard[3] < 0 || debugBoard[0] > 7 || debugBoard[1] > 7 || debugBoard[2] > 7 || debugBoard[3] > 7) 
        break;

    debugOutBoard[debugBoard[2], debugBoard[3]] = debugOutBoard[debugBoard[0], debugBoard[1]];
    debugOutBoard[debugBoard[0], debugBoard[1]] = 0;
    int rowLength = debugOutBoard.GetLength(0);
    int colLength = debugOutBoard.GetLength(1);

    for (int i = 0; i < rowLength; i++)
    {
        for (int j = 0; j < colLength; j++)
        {
            Debug.Write(debugOutBoard[i, j].ToString().PadLeft(3, ' '));
        }
        Debug.Write(Environment.NewLine + Environment.NewLine);
    }
}

此外,我尝试使用 concurrentbag 来存储移动(稍后我将对移动处理进行多线程处理)但是一旦 foreach 循环接触到并发包,包的所有内存值都变为一个价值。我已经被困在这个路障上好几天了,我真的需要帮助。

如果 'futures' 包含 86 个项目,它停止迭代的唯一方法是发生异常。 Visual studio(在默认设置中)应该在发生这种情况时中断,除非您在某处处理异常。

将整个事情包装在 try{} catch{} 中并在 catch 中设置一个断点并查看它是否命中。

您的 if 语句在满足其条件时跳出 for 循环,我认为这是在第 5/6 次迭代时第一次发生。

What I meant to do is iterate to the next element. What command would I use to do that? –

您需要使用 continue 而不是 break