使用变量值作为循环索引

时间:2017-03-21 19:14:51

标签: c# for-loop return

我有一个代码,其中包含2个for循环:

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 个答案:

答案 0 :(得分:0)

正如@dcg所提到的,在再次迭代之前,请先计算+ = 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循环中的中间条件。希望它有所帮助。

答案 1 :(得分:0)

首先

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

}