0

私は通常、後藤が私の心に最良の選択肢であるように思われる状況に陥ります。しかし、私はそれを使用しないように何度か読んだことがあり、常に代替手段があります。今、私はこのようなことを試みています:-

    try{
            //Something that requires internet connectivity;
    }
     catch{
            //Show a message-Internet connectivity lost,and go back to try
    //-->FYI--Ignore "show message", because I am just appending this text to a  
    // textbox. So there won't be a problem of multiple ShowMessage Boxes.
      }

さて、私にとって最良の選択肢は、catchステートメントでgotoを使用することですが、私はそれを避けようとしています。tryは関数の最初のステートメントであり、その関数を思い出すと、スタックを積み上げているので、これも良いオプションではありません。どのような代替手段を取ることができますか?

4

3 に答える 3

8

whileフラグ付きのループを使用する

var tryAgain = true;
while (tryAgain) 
{
    try
    {
        ...
        tryAgain = false;
    }
    catch (...)
    {
        tryAgain = ...
    }
}
于 2012-09-19T11:14:07.593 に答える
4

この特定のケースでは、同じ関数を再帰的に呼び出し、呼び出した回数でカウンターを保持することに何の問題もありません。このようなもの(擬似コード):

public void DoMyInternetThing(int numberOfAttemptsRemaining)
{
    try 
    {
         //do stuff
    }
    catch (ConnectionException) 
    {
        if (numberOfAttemptsRemaining <= 0)
            throw new SomethingBadHappenedException();

        DoMyInternetThing(numberOfAttemptsRemaining - 1);  
    }
}

再帰的なものと同様に、正しく構造化する必要がありますが、これはうまく機能し(私は自分で使用しました)、回避しますgoto(それ自体は悪くありませんが、使用するとスパゲッティや不適切な構造のコードにつながる可能性があります) 。

于 2012-09-19T11:14:29.167 に答える
2

再試行する場合は、try-catchをdo-whileループでラップします。

于 2012-09-19T11:11:00.970 に答える