Использование значения переменной как для индекса цикла

У меня есть код, который содержит 2 для циклов:

for (int count = 0; list_Level[count] < list_Level[list_Level.Count]; count++)

        {
            for (int a = 0; list_Level[a] < Initial_Lvl; a++)
            {
                var dOpt = new DataGridObjectOpt();


                double Closest_Goallvl = list_Level.Aggregate((x, y) => Math.Abs(x - Initial_Lvl) < Math.Abs(y - Initial_Lvl) ? x : y);

                dOpt.ImageSource = new Uri(filePaths[a], UriKind.RelativeOrAbsolute);

                dOpt.Level_Index = Initial_Lvl;
                dOpt.Level_Goal = goallvl;
                dOpt.Stage = 1;

                LOpt_Temp.Add(dOpt);

            }

            count = a;
            int best_Profit_Ind = LOpt_Temp.FindIndex(x => x.TotalCost == LOpt_Temp.Max(y => y.TotalCost));
            LOpt.Add(LOpt_Temp[best_Profit_Ind]);
            dataGridOpt.ItemsSource = LOpt;
        }

Я хочу, чтобы циклы начинались с 0, однако, как только внутренний цикл заканчивается в первый раз и заканчивается значением aЯ хочу, чтобы внешний цикл начался с этого места сейчас.

Например, первый цикл начинается с 0, внутренний цикл завершается, когда a=6. Теперь я хочу начать отсчет 6, а не 1.

Спасибо.

2 ответа

Прежде всего

list_Level[count] < list_Level[list_Level.Count]

используя это условие, вы получите IndexOutOfRangeException, который вы должны использовать

list_Level[count] < list_Level[list_Level.Count - 1] 

что-то вроде того. с другой стороны, это может помочь вам:

for (int count = 0; list_Level[count] < list_Level[list_Level.Count - 1] && count < list_Level.Count; count++){
      for (int a = 0; list_Level[a] < Initial_Lvl; a++)
      {
         //Your code
      }
      count = a-1;
      if(count  >= list_Level.Count)
      {
          break;
      }
      //Your code

}

Как упоминалось в @dcg, перед повторением выполните count+=a-1. Как упоминалось @dlatikay, вы можете столкнуться с IndexOutOfRangeException, Чтобы избежать этого, добавьте и условие во внешнем цикле for. Так что ваш окончательный код выглядит примерно так:

for (int count = 0; list_Level[count] < list_Level[list_Level.Count] && count < list_Level.Count; count++)
{
    for (int a = 0; list_Level[a] < Initial_Lvl; a++)
    {
        //Your code
    }
    count+=a-1

    //Your code
}

Обратите внимание на среднее состояние во внешнем цикле for. Надеюсь, поможет.

Другие вопросы по тегам