2016-01-27 5 views
1

Я пишу шахматный движок в C#, и я пытаюсь отлаживать движение поколений. Пока я использую точки останова для проверки переменных, но мне нужен лучший способ для отладки. Несмотря на то, что точка останова показывает, что этот список имеет длину 86, цикл работает только 5 раз. Единственное, что я могу придумать, это то, что массивы в списке имеют длину 5, но я не знаю, что бы это вызвало.C# При использовании foreach в списке массивов foreach только итерации 5 раз, хотя список имеет длину 86

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 хранить двигается в (я собирался распараллелить обработку двигаться позже), но как только цикл Еогеаспа коснулся параллельной мешка, все значения памяти мешка изменились к одному значению. Я несколько дней застрял на этом roadblock, и мне действительно нужна помощь.

+1

что если заявление прорывается из вашего цикла Еогеасп ... Я бы написать ответ, но я понятия не имею, что это если на самом деле пытается выполнить – Sayse

+0

Ах, очень хороший улов. Я считаю, что это, вероятно, проблема. То, что я хотел сделать, это перебрать следующий элемент. Какую команду я буду использовать для этого? – furrysalamander

+0

Я добавил ответ (используйте 'continue') – Sayse

ответ

1

Ваш оператор if выходит из цикла for, когда его условие удовлетворено, я предполагаю, что это происходит впервые на 5-й и 6-й итерации.

То, что я хотел сделать, это перебрать следующий элемент. Какую команду я буду использовать для этого? -

Вы должны использовать continue вместо break

0

Если «фьючерс» содержит 86 элементов, единственный способ остановить итерацию - это исключение. Visual studio (в настройках по умолчанию) должен прерываться, когда это происходит, если вы не обрабатываете исключение где-то.

Оберните все это в try {} catch {} и установите контрольную точку в catch и посмотрите, попадает ли она.

+0

Нет, точка останова не срабатывает. Единственное, о чем я могу думать, это то, что вместо этого используется длина массива, за исключением того, что я по-прежнему извлекаю данные из списка. – furrysalamander

+0

А, я не перерыв; Посмотрите на другие ответы – fhogberg