これがC#でのgotoの明確な使用と見なされるかどうか疑問に思っています:
IDatabase database = null;
LoadDatabase:
try
{
database = databaseLoader.LoadDatabase();
}
catch(DatabaseLoaderException e)
{
var connector = _userInteractor.GetDatabaseConnector();
if(connector == null)
throw new ConfigException("Could not load the database specified in your config file.");
databaseLoader = DatabaseLoaderFacade.GetDatabaseLoader(connector);
goto LoadDatabase;
}
スニペットは小さく、意味があるはずなので、これは問題ないと思います。例外を処理した後に操作を再試行したいときに、人々が通常このようなエラーから回復する別の方法はありますか?
編集:それは速かった。いくつかの質問に答えて、物事を少し明確にするために-これは本質的に別の種類のプロジェクトから変換しているプロセスの一部です。_userInteractor.GetDatabaseConnector()呼び出しは、ユーザーが再試行するかどうかを決定する部分です(おそらく、ロード元の構成にあるデータベースとは異なるデータベースを使用します)。nullが返された場合、新しいデータベース接続は指定されておらず、操作は完全に失敗するはずです。
whileループを使用することを考えなかった理由がわかりません。午後5時に近づきすぎているに違いありません。
編集2: LoadDatabase()メソッドを確認しましたが、DatabaseLoaderException
失敗するとaがスローされます。上記のコードを更新して、Exceptionではなくその例外をキャッチしました。
編集3:一般的なコンセンサスはそれであるようです
- ここでgotoを使用する必要はありません。whileループで問題ありません。
- このような例外を使用することはお勧めできません。ただし、何に置き換えるかはわかりません。