2013-07-14 73 views
0

我嘗試從Object類型強制轉換爲十進制:對象爲十進制鑄造無法實施

Object obj = new Object(); 
obj = 10; 
decimal dec = (decimal)obj; 

但該行十進制DEC =(十進制)目標文件中,我得到這個異常:

指定的轉換無效。

任何想法爲什麼這個拆箱不能實現?

預先感謝您。

回答

3

這就是爲什麼你有Convert.ToDecimal()拳擊和拆箱只能發生在相同的類型之間。

10文字在C#編譯器作爲System.Int32(糾正我,如果我錯了人),因此本拆箱到小數將導致錯誤

2

只能拆箱值類型,以表示其原始類型或該類型的可空對等版本。

對於這背後的原因閱讀本Eric Lippert's

2

當你寫obj = 10;,對象有int類型的值。

試試這個:

Object obj = new Object(); 
obj = 10M; 
decimal dec = (decimal)obj; 

或本:

Object obj = new Object(); 
obj = 10; 
decimal dec = (decimal)(int)obj; 

你應該閱讀MSDN上Boxing and Unboxing文章。

對於值類型的開箱在運行時獲得成功,該項目是 裝箱必須是先前由拳擊該值類型的實例創建 的對象的引用。嘗試解除空值 會導致NullReferenceException。嘗試解除對不兼容值類型的引用,將導致InvalidCastException。

+0

'Convert.ToDecimal()'? –

+0

@Aniket'Convert.ToDecimal()'是一個很好的解決方案:) – kmatyaszek