2011-03-15 42 views
13

爲什麼不能將已裝箱的int直接投射到double鑄造盒裝值

object o = 12; 
double d = (double)o; 

這拋出了無效的轉換異常。相反,它似乎必須首先投射爲int,然後再投射到double

object o = 12; 
double d = (double)(int)o; 

我敢肯定,簡單的答案是「因爲這就是拳擊的作品」,但我希望有人可以在這裏擺脫一些光。

+19

參見:表示與認同 - 神話般的冒險編碼(http://blogs.msdn.com/b /ericlippert/archive/2009/03/19/representation-and-identity.aspx) – Ani 2011-03-15 13:52:28

+1

@Ani - 把這個作爲答案,我會在一秒鐘內讚揚它! – 2011-03-15 13:53:38

+0

同上 - ani - 對我來說看起來是正確的答案 – 2011-03-15 13:54:02

回答

8

退房從今天早些時候這樣一個問題:如果目標類型是完全一樣被堵住原有的類型,所以異常被拋出Why am I getting InvalidCastException?

拆箱操作才能成功。 John Leidegren提供的This link詳細解釋。

5

如果你不知道在編譯時的原始類型:

object o = 12; 
double d = (double)Convert.ChangeType(o, typeof(double));