从if到while使用goto

时间:2013-11-23 23:21:12

标签: c# goto

如何在此停止使用goto

if(true)
{
    goto ln1;
}
DialogResult b=DialogResult.Yes;
while(b==DialogResult.Yes){
    //Stuff
    ln1: Function();  
}

因为明显不允许使用从一个范围到另一个范围的goto。(它给出了一个错误)。 那么我该怎么做呢?我需要进入第二行代码,而不是第一行。

4 个答案:

答案 0 :(得分:3)

如果您想在没有初步检查条件的情况下进入循环,请使用do ... while循环。

示例:

DialogResult b;
do {
   b = ShowDialog(myYesNoDialog);
} while(b == DialogResult.Yes);

如果要根据条件使用初始检查或不使用,请使用布尔变量:

bool skipCondition = (some condition);
DialogResult b = DialogResult.Yes;
while (skipCondition || b == DialogResult.Yes) {
   skipCondition = false;
   b = ShowDialog(myYesNoDialog);
}

答案 1 :(得分:1)

不要使用goto标签; goto会使您的代码变得非常复杂!我认为你必须重新思考课程设计和功能工作流程          非常有用的链接:'Goto' is this bad?

var runFlag = false;
   if (true)
   {
       runFlag = true;
   }
   DialogResult b = DialogResult.Yes;
   while (b == DialogResult.Yes || runFlag) 
   {
     Function(); 
   }

答案 2 :(得分:0)

似乎是这样的:

DialogResult b=...; // must be initialized - it's not correct to skip that

if(true)
{
    // goto ln1;
} else {
    b=DialogResult.Yes;
}
do
{
  /*ln1:*/ Function();
}
while(b==DialogResult.Yes); 

答案 3 :(得分:0)

你确实意识到你的代码会跳过很多行,所以程序实际上不会编译让lone运行吗? 你所写的内容与

相同
    do
{
    Function();
}while(b==DialogResult.Yes)

要使其有效,您需要执行

DialogResult b = DialogResult.Yes;

首先