投射一个盒装价值
为什么不能将装箱的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));