在嵌套循环中使用goto [英] using goto in nested loops

查看:177
本文介绍了在嵌套循环中使用goto的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

for(int serie = 1; serie< TurnierGruppe.AktuelleSerie.Serie; serie ++)

{

//外:这里有作品

foreach(Tischbesetzung tb in

TurnierGruppe.Serien [serie] .Tischebesetzungen)

{

for(int i = 0; i< ; tb.SpielerAnzahl; i ++)

{

if(tb.Spieler [i] .Spieler == this)

{

gespielteSerien.Add(tb.Spieler [i]);

转到外部;

}

}

}

外部:

}


我得到一个错误,标签后面缺少分号。如果我将

标签移动到循环顶部就行了。

我猜C#不允许标签没有直接跟随代码,如果是的话我就是d

想知道原因。

我现在的问题是,如果我将标签移到循环的顶部那么/>
枚举器不会被移动到下一个会给我带来严重麻烦的元素。


-

cody


免费软件工具,游戏和幽默
http://www.deutronium.de.vu || http://www.deutronium.tk

解决方案

我知道,这不是答案,但为什么不这样做(使用flag& break):

bool flag = true;

for(int serie = 1; serie< TurnierGruppe.AktuelleSerie.Serie&& flag;
serie ++){
//外:这里是作品
foreach(Tischbesetzung) tb in
TurnierGruppe.Serien [serie] .Tischebesetzungen)
{
for(int i = 0; i< tb.SpielerAnzahl; i ++)
{
if( tb.Spieler [i] .Spieler == this)
{
gespielteSerien.Add(tb.Spieler [i]);
flag = false;
休息; }
}
}外部:
}




>我知道,这不是答案,但为什么不这样做(使用flag&

break):


bool flag = true;

for(int serie = 1; serie< TurnierGruppe.AktuelleSerie.Serie&& flag;


serie ++)

{
//外:这里是作品
foreach(Tischbesetzung tb in
TurnierGruppe.Serien [serie] .Tischebesetzungen)
{
for(int i = 0; i< tb.SpielerAnzahl ; i ++)
{
if(tb.Spieler [i] .Spieler == this)
{
gespielteSerien.Add(tb.Spieler [i]);
flag = false;


break;

}
}
}
外部:
}




使用标志会降低性能,容易出错并且可读性甚至不比

goto。

现在问题出现了为什么C#不允许像Java这样的标记符。


-

cody


免费工具,游戏和幽默
http://www.deutronium.de.vu || http://www.deutronium.tk

你好Cody,


标签需要有一些它引用的代码。


尝试放一个空的代码块{}外部:


外部:{}


快乐编码!

Morten Wennevik [C#MVP]

for (int serie=1; serie < TurnierGruppe.AktuelleSerie.Serie; serie++)
{
//outer: here is works
foreach (Tischbesetzung tb in
TurnierGruppe.Serien[serie].Tischebesetzungen)
{
for (int i=0; i<tb.SpielerAnzahl; i++)
{
if (tb.Spieler[i].Spieler==this)
{
gespielteSerien.Add(tb.Spieler[i]);
goto outer;
}
}
}
outer:
}

Iam getting an error that a semicolon is missing after the label. If I move
the label to the top of the loop it works.
I guess C# doesn''t allow labels with no code following directly, if so I''d
like to know the reason.

The problem for me is now if I''d move the label to the top of the loop the
enumerator will not be moved to the next element which would cause serious
trouble for me.

--
cody

Freeware Tools, Games and Humour
http://www.deutronium.de.vu || http://www.deutronium.tk

解决方案

i know, this is not an answer, but why dont you do this (use flag & break):
bool flag = true;

for (int serie=1; serie < TurnierGruppe.AktuelleSerie.Serie && flag; serie++) {
//outer: here is works
foreach (Tischbesetzung tb in
TurnierGruppe.Serien[serie].Tischebesetzungen)
{
for (int i=0; i<tb.SpielerAnzahl; i++)
{
if (tb.Spieler[i].Spieler==this)
{
gespielteSerien.Add(tb.Spieler[i]);
flag = false; break; }
}
}
outer:
}




> i know, this is not an answer, but why dont you do this (use flag &
break):


bool flag = true;

for (int serie=1; serie < TurnierGruppe.AktuelleSerie.Serie && flag;


serie++)

{
//outer: here is works
foreach (Tischbesetzung tb in
TurnierGruppe.Serien[serie].Tischebesetzungen)
{
for (int i=0; i<tb.SpielerAnzahl; i++)
{
if (tb.Spieler[i].Spieler==this)
{
gespielteSerien.Add(tb.Spieler[i]);
flag = false;


break;

}
}
}
outer:
}



Using flags degrades performance, is error prone and less readable than even
goto.
Now the question arises why C# doesn''t allow labeled breaks like Java.

--
cody

Freeware Tools, Games and Humour
http://www.deutronium.de.vu || http://www.deutronium.tk


Hi Cody,

A label needs to have some code it refers to.

Try putting an empty code block {} after outer:

outer: {}

Happy coding!
Morten Wennevik [C# MVP]


这篇关于在嵌套循环中使用goto的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆