プログラミング中に、goto のような構造から本当に恩恵を受ける問題に遭遇しました。次の例を検討してください。
//tries to find a solution for a problem 3 times
//in this process copies elements from old to newList
foreach (var tryNbr in Util.range(0,3))
{
List<A> newList = new List<A>();
List<A> oldList = workList;
while(oldList.Count != 0)
{
List<A> possibleMatched = FINDWITHLINQSTUFF;
//try stuff out
if(possibleMatches.Count == 0)
break;
//do more stuff
}
if(oldList.Any())
{
workList = newList;
return true;
}
}
したがって、ここでの問題は、while ループで何らかの条件をチェックする必要があることです。それが true の場合は、前のプロセス全体が機能しなかったため、次の foreach 反復から続行したいと考えています。
より近い中断または継続がこれを行うことができるので、必要な注意を払わずに後で何かを変更する可能性がある場合、エラーが発生しやすい、while の背後にある余分な条件を確認する必要があります。
のような契約はありますか
goto foreach;
また
continue foreach;
次の外側の foreach ループから続くのはどれですか? ここでgotoを使用することは実際に実行可能な解決策でしょうか(そしてカウンターを手動でインクリメントしますか?
PS: このコードの一般的な構造について、より良い解決策はありますか?