如何打破两个for循环

时间:2014-03-31 10:25:05

标签: c#

如何在突出显示的行中打破两个for循环。 (显示MessageBox.Show("THE ITEM ID DOES NOT EXIST.!");后)

bool conditionitem = true;

for (int cun = 0; cun < ItemIdNumber.Length; cun++)
{
    int Item_Id = Convert.ToInt32(ItemIdNumber[cun]);

    for (int yyu = 0; yyu <= 1258038; yyu++)
    {
        int weer = c[yyu];

        if (weer == Item_Id)
        {
            conditionitem = false;
            itemseq = yyu;
        }
    }

    if (conditionitem != false)
    {
        MessageBox.Show("THE ITEM ID DOES NOT EXIST.!");
        break; //--> here i want two break for two times
    }
}

通过这个突破它只会打破第一个循环。

3 个答案:

答案 0 :(得分:1)

我能想到的两个选择:

(1)在中断之前在第二个循环内设置一个标志。如果设置了标志,则在内部迭代中使用一个突破第一次迭代的条件。

 bool flag = false;
 foreach (item in Items)
 {
   foreach (item2 in Items2)
   {
       flag = true; // whenever you want to break
       break;
   }

if (flag) break;
}

(2)使用goto语句。

  foreach (item in Items)
  {
    foreach (item2 in Items2)
    {
        goto GetMeOutOfHere: // when you want to break out of both
    }

   }

    GetMeOutOfHere:
      // do what you want to do.

答案 1 :(得分:1)

您可以将循环重构为查找项目的方法:

SomeType SomeMethod(int itemId)
{
    for (int cun = 0; cun < ItemIdNumber.Length; cun++)
    {
        int Item_Id = Convert.ToInt32(ItemIdNumber[cun]);

        for (int yyu = 0; yyu <= 1258038; yyu++)
        {        
            if (c[yyu] == itemId) return yyu;
        }
    }
    return null;
}

然后使用它:

var item = SomeMethod(Item_Id);
if(item == null)
{
    MessageBox.Show("THE ITEM ID DOES NOT EXIST.!");
}
else
{
    // ...
}

这也避免了混合UI逻辑和内部逻辑。

答案 2 :(得分:0)

将嵌套循环放入函数中,并在需要中断循环时返回true / false?

bool Function()
{
    for(int i = 0; i < 10; ++i)
    {
        for(int j = 0; j < 10; ++j)
        {
            if (error)
            {
                MessageBox.Show("THE ITEM ID DOES NOT EXIST.!");
                return false;
            }
        }
    }
    return true;
}