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