投射一个盒装价值

Ada*_*kis 13 c# casting

为什么不能将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)

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

Mik*_*erg 8

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

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


Chr*_*Xue 5

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

object o = 12;
double d = (double)Convert.ChangeType(o, typeof(double));
Run Code Online (Sandbox Code Playgroud)