2009-04-29 49 views
2

假設我有一個對象下面的方法:最好的解釋爲什麼有些失敗

public class foo 
{ 
    public bool DoSomethingAwesome() 
    { 
     bool bar = DidSomething() //suppose this sends an email; 
     return bar; 
    } 

} 

如果我想提供關於爲什麼DidSomething返回一個錯誤的更詳細的將最好的做法是指定一個消息要屬性的屬性,還是將Out參數分配給DoSomethingAwesome?

+0

我覺得這個問題有點誤導,這更多的是關於在錯誤條件下做什麼(我投票拋出異常)。 – danswain 2009-04-29 23:53:53

回答

5

我認爲這很大程度上取決於您使用的框架(即它是一個約定)。

  • 對於Win32 - 你有SetLastError, GetLastError。
  • 對於.NET,它通常會拋出異常,但可能會更改爲 以符合您的情況。

可能是一個出參數可以。

如果您決定採用例外路由,MSDN會有一個條目「Design Guidelines for Exceptions」。在「Framework Design Guidlines」 - 第7章中有一個很好的討論,我強烈建議!

+2

如果它是全部.NET,則拋出異常是正確的選擇。 – Noldorin 2009-04-29 21:50:39

+0

我傾向於同意,特別是在這種情況下,因爲您正在執行的操作可能不在性能關鍵的例程中。例外並不總是正確的解決方案,但這通常只適用於高性能代碼,因爲拋出/捕獲異常的速度往往很慢。 – 2009-04-29 22:02:10

2

這很大程度上取決於你在做什麼,但在給定的情況下 - 發送電子郵件 - 我會根據出錯的情況拋出不同的例外情況。發送電子郵件應該每次都有效,當發生不好的事情時,我想強制調用者處理它,而不是默認忽略它。

在其他situtations,其中失敗的機率就很高,失敗可以忽略不計,或者false並不一定意味着失敗,我會創造一個enum具有值爲每個類型的故障,一個用於成功,返回,而不是bool

0

如果假條件不是「例外」(不是很少但均勻發生),那麼您不應該使用例外。在這種情況下,使用out參數要好得多。