2011-03-15 46 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));