2012-07-12 262 views
2

我有一個函數請求一個人,返回人員ID。但是,如果方法檢測到故障,我想返回一個錯誤(帶有說明?)。函數返回值

因此,可以說,我的作用是:

public int GetPersonId(string username) 
{ 
    //Logic 
    return personId; 
} 

中的邏輯,我稱之爲一個進程,並返回一個ID。但是,如果沒有結果返回,我可以返回-1,並在調用代碼中處理 - 但是感覺不好。

創建一個異常並嘗試/抓住它,或者是什麼會更好?我確信我讀過一次,爲商業類型規則拋出異常,這不是好習慣。

解決這個問題的最佳方法是什麼?

此外,也許proc會返回其他狀態,如'人存在,但被標記爲已刪除','沒有這樣的人存在'等。我的意思是有多個'例外'。

+0

[在異常和返回值之間選擇]的可能重複(http://stackoverflow.com/questions/5460101/choosing-between-exception-and-return-value) – 2012-07-12 00:51:01

+1

要返回「ID」或「Nothing」 * I *通常在失敗時使用'int?'並返回'null' - 但是,如果返回比拋出異常更適用,則取決於這種失敗操作應具有的「什麼樣的效果」。特別是,對我來說,最大的決定性問題是:*期望*失敗或失敗是否意味着*編碼錯誤*?意外的情況和編碼錯誤通常應該導致異常,imoho。 – 2012-07-12 00:51:38

+2

使用-1作爲錯誤代碼沒有任何問題。 – 2012-07-12 00:53:13

回答

0

我認爲你需要非常清楚地區分出什麼是錯誤的或在你的功能和不是。如果沒有找到結果的事實是一個錯誤(只有你可以定義它是否),然後拋出一個異常。如果它不是錯誤(因爲是可能的輸出),那麼返回一個代碼或任何你想要的。調用代碼應該管理它。但是不要使用異常處理來處理程序的邏輯。這是不正確的

1

我能想到的2個選項

  1. 拋出異常的內部功能

    throw new Exception("Some Message");

  2. 改變返回類型。而不是int返回int ?.如果有錯誤返回null其他值。

0

是的,你可以通過繼承Exception類創建你自己的異常,或者也做這種方式throw new Exception("Error in Person.GetPersonId");只要你抓住他們,併爲錯誤記錄器記錄他們來說,建議立即進行刪除DBE罰款監守你會看到消息無論哪種方式

如果這是你想報告消息的唯一地方,然後使用上面顯示的內聯代碼,但如果你經常需要它,並想要爲不同類型自定義異常,那麼請創建你自己的消息作爲良好的做法

0

1.如果你想返回一些消息,你可以改變你的返回類型爲字符串。您將在Calling proc中處理字符串類型。 2.You可以與消息拋出異常,像

throw new Exception("what's wrong") 

而且你可以使用try/catch來抓住它!