-1

如果发生特殊异常,我需要运行相同的代码。所以我尝试使用goto,但使用语句我无法在语句定位goto之前移动到一行goto

示例代码,

try
{
    top:

    //Code

}
catch (Exception ex)
{
    if (ex.Message.Substring(1, 5) == "error")
    {
        goto top: //Error - Can not resolve symbol `top`
        goto bottom: //OK
    }
}

bottom:
    //Code
}

如何执行前一行代码?

4

4 回答 4

6

您的代码可以很容易地重写如下。

while (true)
{
    try
    {
          //Code
    }
    catch (Exception ex)
    {
        if (ex.Message.Substring(1, 5) == "error")
        {
            continue;
            //goto bottom; //This doesn't makes sense after we transfer control 
        }
        else
        {
             break;//Did you mean this?
        }
     }
}

正如评论中所指出的,使用一些计数器来防止在失败的情况下连续循环是一个好主意。

于 2013-09-03T10:24:00.407 回答
1

尝试这个:

top:
try
{


    //Code

}
catch (Exception ex)
{
    if (ex.Message.Substring(1, 5) == "error")
    {
        goto top: //Error - Can not resolve symbol `top`
        goto bottom: //OK
    }
}

bottom:
    //Code
}
于 2013-09-03T10:21:46.870 回答
1

或者试试这个:

public void MyMethod(int count = 0)
{
    if (count > 100)
    { 
        //handle error
        return
    }

    try
    {
        //something
    }
    catch (Exception ex)
    {
        if (ex.Message.Substring(1, 5) == "error")
            MyMethod(++count);
    }

    //other stuff
}
于 2013-09-03T10:27:12.613 回答
1

如果您想重复或重新运行代码,请在 while 循环中执行此操作。这就是它的用途。

这是一个易于理解的示例:

var isDone = false;
while(!isDone) {
    try {
        // code
        isDone = true;
    }
    catch(Exception ex) {
      if (ex.Message.Substring(1, 5) == "error")
      {
        continue; // shortcuts it back to the beginning of the while loop
      }
      // other exception handling
      isDone = true;
    }
}
于 2013-09-03T10:36:47.070 回答