2010-08-15 20 views
3

當找不到預期的自定義屬性(我更喜歡現有的.NET異常之一)時,選擇正確的異常類型以拋出,我遇到了一些問題。當自定義屬性丟失時選擇正確的異常類型

你在這種情況下推薦什麼?提前致謝。

編輯:

這裏他的上下文:

[<ExpectedAttribute()>] 
let foo args ... = ... 

函數foo(它是用戶定義的)被傳遞到運行時引擎。如果自定義屬性不存在,則運行時必須引發異常。

+0

請給出更多的上下文 - 拋出的異常在哪裏?它與爭論有關嗎? – 2010-08-15 12:32:36

回答

3

如果定製屬性,那麼它是不會以適應System例外。

您可以使用系統例外,但您的域名是什麼?什麼樣的合同被打破?它很重要,如果這是關於序列化或測試或...


編輯,您foo加入後:你來與系統異常最接近的是System.ArgumentException,因爲你的引擎接收沒有參數滿足其要求。

但我會定義我自己的MissingExpectedAttribute異常。

2

我會建議一些像「InvalidOperationException」或「InvalidArgumentException」一般的東西,並將有關預期屬性的詳細信息放在消息中。

+0

'InvalidOperationException'將是合適的,但是'InvalidArgumentException'不會,'ArgumentException'和子類型被明確定義爲關於方法參數驗證。 – Richard 2010-08-15 13:51:28

+0

兩者都不夠具體,但你說得對,InvalidOperation更接近一點。自定義異常可能是最佳解決方案。 – 2010-08-15 15:17:54

1

如果調用的構造函數,方法或屬性被賦予了違規對象,則爲ArgumentException。如果違反規則的對象是前一個操作中的狀態的一部分,並且調用此屬性的方法或屬性被調用,則爲InvalidOperation。