如何跳出所有循环

cysccnu 2008-08-19 03:31:59
有这么一个语句如下,有两个嵌套的循环,continue是跳出本次循环,break是跳出最近的嵌套循环,现在我想在满足条件的时候跳出所有的嵌套循环,即不执行任何循环,用什么语句好呢?

for (int i = 0; i < datagridview.Rows.Count; i++)
{
for (int j = 0; j < datagridview.Columns.Count; j++)
{
if (datagridview.Columns[j].Visible == true && !System.Convert.IsDBNull(datagridview[j, i].Value))
{
string cellcontain = System.Convert.ToString(datagridview[j, i].Value).ToUpper();
int index = cellcontain.IndexOf(condition.ToUpper(), 0);
if (index >= 0)
{
datagridview.CurrentCell = datagridview[j, i];
iscontinue = false;
break;
}
}
else
continue;
}
}
...全文
1801 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuzhenpolestar 2011-07-17
  • 打赏
  • 举报
回复
因为break一次只能跳出一层循环,所以如果想从多层嵌套中迅速跳出有以下方法:

1、goto语句

while(condition1)

{

  while(condition2)

  {

    while(condition3)

      if(some disaster)

        goto quit;

  }

}

quit:

   ;

2、设置一个状态标志:

enum {EXIT ,OK}status;

...

status = OK;

while(status == OK && condition1)

{

  while(status == OK && condition2)

{

    while(status == OK && condition3)

      if(some disaster)

      {

        status = EXIT;

        break;

      }

  }

}

3、单独设置一个函数,if disaster的时候,就用return语句离开这个函数。
来自http://www.cnblogs.com/dusts/archive/2011/07/12/2103940.html
路人乙e 2008-08-19
  • 打赏
  • 举报
回复
支持9楼
yatobiaf 2008-08-19
  • 打赏
  • 举报
回复
应该设置一个flag,在需要跳出的循环判断一下这个flag是否为true。当需要设置的时候把这个flag设置成false就可以了。例如:

bool flag = true;
for (int i = 0; i < datagridview.Rows.Count&&flag ; i++)
{
for (int j = 0; j < datagridview.Columns.Count&&flag ; j++)
{
if (datagridview.Columns[j].Visible == true && !System.Convert.IsDBNull(datagridview[j, i].Value))
{
string cellcontain = System.Convert.ToString(datagridview[j, i].Value).ToUpper();
int index = cellcontain.IndexOf(condition.ToUpper(), 0);
if (index >= 0)
{
datagridview.CurrentCell = datagridview[j, i];
iscontinue = false;
flag = false;
}
}
else
continue;
}
}
GhostAdai 2008-08-19
  • 打赏
  • 举报
回复
用goto,虽然不提倡,但只要合理运用,而不是滥用,依然是个很好用的东东。
格拉 2008-08-19
  • 打赏
  • 举报
回复
GOTO吧,这个跳深层循环
fuda_1985 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ericzhangbo1982111 的回复:]
public void function(DataGridView datagridview)
{
for (int i = 0; i < datagridview.Rows.Count; i++)
{
for (int j = 0; j < datagridview.Columns.Count; j++)
{
if (datagridview.Columns[j].Visible == true && !System.Convert.IsDBNull(datagridview[j, i].Value))
{

[/Quote]
lude8880 2008-08-19
  • 打赏
  • 举报
回复 1
打倒goto!!!
YJDP0918 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ericzhangbo1982111 的回复:]
public void function(DataGridView datagridview)
{
for (int i = 0; i < datagridview.Rows.Count; i++)
{
for (int j = 0; j < datagridview.Columns.Count; j++)
{
if (datagridview.Columns[j].Visible == true && !System.Convert.IsDBNull(datagridview[j, i].Value))
{

[/Quote]

或者...GOTO到你想到继续的地方...
yagebu1983 2008-08-19
  • 打赏
  • 举报
回复
return一下!!
CUMBER 2008-08-19
  • 打赏
  • 举报
回复
learn
ericzhangbo1982111 2008-08-19
  • 打赏
  • 举报
回复
public void function(DataGridView datagridview)
{
for (int i = 0; i < datagridview.Rows.Count; i++)
{
for (int j = 0; j < datagridview.Columns.Count; j++)
{
if (datagridview.Columns[j].Visible == true && !System.Convert.IsDBNull(datagridview[j, i].Value))
{
string cellcontain = System.Convert.ToString(datagridview[j, i].Value).ToUpper();
int index = cellcontain.IndexOf(condition.ToUpper(), 0);
if (index >= 0)
{
datagridview.CurrentCell = datagridview[j, i];
iscontinue = false;
break;
}
}
else
return;
}
}

}


作一个方法
用return就可以了。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧