为什么被装箱的int
不能直接投放到double
?
object o = 12;
double d = (double)o;
抛出无效的强制转换异常。相反,似乎必须先将其转换为int
,然后再转换为double
。
object o = 12;
double d = (double)(int)o;
我确信这个简单的答案是“因为这就是拳击的工作方式”但我希望有人可能会在这里说清楚。
答案 0 :(得分:8)
今天早些时候查看这个问题:Why am I getting InvalidCastException?
如果目标类型与装箱的原始类型完全相同,则取消装箱操作才会成功,因此会引发异常。 John Leidegren提供的This link详细解释了。
答案 1 :(得分:5)
如果您在编译时不知道原始类型:
object o = 12;
double d = (double)Convert.ChangeType(o, typeof(double));