2011-07-19 79 views
1

我想用其他數據拋出異常而不創建異常變量。類似這樣的:有沒有辦法內聯初始化異常的數據?

throw new Exception() { Data.Add("foo", "bar") }; 

這可能嗎?

+0

這會不會意味着' throw'將指針拋出新的'Exception'對象?編輯:傻我,以爲我因爲某種原因在看C++的問題,只是忽略了我說的。 – Dan

+0

只是好奇你爲什麼要這樣做?新的Exception()將會創建一個新的異常變量.. – luketorjussen

+0

@luketorjussen:它將創建一個新的*對象*,但不是一個新的*變量*(在C#級別)。 –

回答

7

看起來你應該能夠做到這一點與:

throw new Exception { Data = { "foo", "bar" } }; 

(假設你正在使用C#3,它具有集合初始化...)

當然你也可以做到這一點結合構造函數參數:

throw new ArgumentException("paramName") { Data = { { "foo", "bar" } } }; 
+0

哇,不知道我可以使用只讀屬性。順便說一下,它應該是'{{「foo」,「bar」}}'因爲它是字典 – Poma

+1

它不是'Data = {{「foo」,「bar」}}'因爲'Data'屬性是一個IDictionary?每個KeyValuePair都不需要它自己的大括號,或者是不必要的語法? – FishBasketGordo

+0

@FishBasketGordo:是的,謝謝,修復:) –

0

不幸的是,你不能使用對象初始值設定項來調用這樣的方法。

+0

你可以如果該方法被稱爲添加和數據屬性類型實現IEnumerable ... –

0

它確實有一個parametrized constructor取字符串;

throw new Exception("Hello World"); 
0

的問題是不是真正透明(即什麼是數據...的類型) 如果你的意思是,你需要把一些信息到異常:

throw new Exception (Data.Add("foo", "bar").ToString()); 
+0

數據是一個只讀的'IDictionary'屬性 – Poma

+0

謝謝......沒有想到這一點。我看到喬恩Skeet想到它,所以只是忽略我的答案。 – Yahia

相關問題