「......我怎麼知道確切的事情失敗了?」
問這個問題可能意味着你在方法中發生了太多的事情,現在是重構的時候了。
這裏是你的榜樣,從以前的問題複製:
void Function1()
{
//Do something...
//If something fail
Throw New Exception("Fails because bla bla");
//Do something...
//If something fail
Throw New Exception("Fails because bla bla bla bla");
//If everything its ok, just continue without throwing anything
}
功能1是做了很多。爲了使維護(和測試)更容易,您可以將多組邏輯提取到不同的方法中,每個方法返回一個bool
值以指示成功。
bool SomethingOne()
{
var successful = true;
//Do something...
//If something fail
successful = false;
return successful;
}
bool SomethingTwo()
{
var successful = true;
//Do something...
//If something fail
successful = false;
return successful;
}
void Function1()
{
var isOneSuccessful = SomethingOne();
if (!isOneSuccessful)
{
// SomethingOne failed - do something
return;
}
var isTwoSuccessful = SomethingTwo();
if (!isTwoSuccessful)
{
// SomethingTwo failed - do something
return;
}
//If everything its ok, just continue without throwing anything
}
YMMV。我假設「某些失敗」是一個非關鍵問題。就像也許這是一個驗證程序,你只是要顯示一條消息,說:「請檢查所有字段。」
如果是程序員使用你的方法需要特別注意和處理的東西,或者如果它是用戶必須瞭解更多的東西,一個簡單的布爾值可能不會削減它。
閱讀您以前的帖子的評論..並按照一些建議'不要使用例外來控制程序流。' – MethodMan
@DJKRAZE我明白,在我之前的問題中,我不是在問同樣的事情。現在我正在做一個關於如何解決另一個(相關)問題的問題。我正在做一個新的問題,如AndréSnede Hanse在另一個問題中提出的問題。 –
您可以返回枚舉而不是布爾值。如果你需要更多的信息,那麼你可以返回一個類對象而不是枚舉。這樣的類很可能開始類似於一個Exception對象。所以不,返回異常並不是錯誤的。什麼是錯誤的是打開調用者忽略它的機會,永遠不會結束。你永遠不會擔心異常處理速度很慢,對於一個程序來說它不需要做它應該做的事情需要50微秒。 –