移到代码中的前一个给定行

时间:2013-09-03 10:14:49

标签: c#

如果发生微粒异常,我需要运行相同的代码。所以我尝试使用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 个答案:

答案 0 :(得分: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?
        }
     }
}

正如评论中所指出的,使用一些计数器来防止在发生故障时连续循环是个好主意。

答案 1 :(得分: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
}

答案 2 :(得分: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
}

答案 3 :(得分: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;
    }
}