投射一个盒装价值

为什么不能将装箱的int直接转换为double

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

抛出一个无效的强制转换exception。 相反,它似乎必须首先被转换为int ,然后再double

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

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

从今天早些时候看看这个问题: 为什么我得到InvalidCastException?

如果目标类型与装箱的原始类型完全相同,则取消装箱操作仅会成功,因此会引发exception。 John Leidegren提供的这个链接详细解释。

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

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