如果将float分配给double,则接受它,但是如果首先将float分配给一个对象,然后将其强制转换为double,则会给出InvalidCastException。
有人可以澄清一下吗?
float f = 12.4f;
double d = f;//this is ok
//but if f is assigned to object
object o = f;
double d1 = (double)o;//doesn't work, (System.InvalidCastException)
double d2 = (float)o;//this works
答案 0 :(得分:7)
隐式数字转换
float f = 12.4f;
double d = f;//this is ok
取消装箱转换
object o = f;
double d1 = (double)o;//doesn't work, (System.InvalidCastException)
对non_nullable_value_type的拆箱操作包括:首先检查对象实例是给定的non_nullable_value_type的装箱值,然后将值复制到实例之外。
换句话说,它检查o
中是否装了double
,显然不是在这种情况下。
有关转化here的更多信息。