-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

コードを反復または再実行する場合は、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 に答える
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 に答える