投射一个盒装价值

时间:2011-03-15 13:50:48

标签: c# casting

为什么被装箱的int不能直接投放到double

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

抛出无效的强制转换异常。相反,似乎必须先将其转换为int,然后再转换为double

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

我确信这个简单的答案是“因为这就是拳击的工作方式”但我希望有人可能会在这里说清楚。

2 个答案:

答案 0 :(得分:8)

今天早些时候查看这个问题:Why am I getting InvalidCastException?

  

如果目标类型与装箱的原始类型完全相同,则取消装箱操作才会成功,因此会引发异常。 John Leidegren提供的This link详细解释了。

答案 1 :(得分:5)

如果您在编译时不知道原始类型:

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