为什么不能将int那个被装箱的东西直接投入double?
object o = 12;
double d = (double)o;
Run Code Online (Sandbox Code Playgroud)
抛出无效的强制转换异常.相反,它似乎必须首先被投射为int,然后再投射double.
object o = 12;
double d = (double)(int)o;
Run Code Online (Sandbox Code Playgroud)
我确信这个简单的答案是"因为这就是拳击的工作原理"但我希望有人可能会在这里说清楚.
从今天早些时候看看这个问题:为什么我得到InvalidCastException?
如果目标类型与装箱的原始类型完全相同,则取消装箱操作仅会成功,因此会引发异常.John Leidegren提供的这个链接详细解释.
如果您在编译时不知道原始类型:
object o = 12;
double d = (double)Convert.ChangeType(o, typeof(double));
Run Code Online (Sandbox Code Playgroud)