只是想知道,如果這被認爲是在C#中明確使用goto:這是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
。我更新了上面的代碼來捕獲異常,而不是異常。
編輯3:普遍的共識似乎是,
- 使用轉到這裏是沒有必要的 - while循環會做得很好。
- 使用像這樣的異常不是一個好主意 - 我不知道用什麼來代替它。
沒有必要否決一個合理的問題,因爲它有它的話跳轉。 – 2009-11-19 03:33:05
到OP:轉到使用不需要「清除」。它需要「正確」。你的使用很清楚,但是非常不正確。你在這裏有很好的答案,聽取他們的意見.-) – 2009-11-19 03:44:27
但是,這不男人,這個問題應該downvoted。 – 2009-11-19 03:52:54