我嘗試從Object類型強制轉換爲十進制:對象爲十進制鑄造無法實施
Object obj = new Object();
obj = 10;
decimal dec = (decimal)obj;
但該行十進制DEC =(十進制)目標文件中,我得到這個異常:
指定的轉換無效。
任何想法爲什麼這個拆箱不能實現?
預先感謝您。
我嘗試從Object類型強制轉換爲十進制:對象爲十進制鑄造無法實施
Object obj = new Object();
obj = 10;
decimal dec = (decimal)obj;
但該行十進制DEC =(十進制)目標文件中,我得到這個異常:
指定的轉換無效。
任何想法爲什麼這個拆箱不能實現?
預先感謝您。
這就是爲什麼你有Convert.ToDecimal()
拳擊和拆箱只能發生在相同的類型之間。
10
文字在C#編譯器作爲System.Int32(糾正我,如果我錯了人),因此本拆箱到小數將導致錯誤
只能拆箱值類型,以表示其原始類型或該類型的可空對等版本。
對於這背後的原因閱讀本Eric Lippert's
當你寫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。
'Convert.ToDecimal()'? –
@Aniket'Convert.ToDecimal()'是一個很好的解決方案:) – kmatyaszek