为什么不能将具有浮点值的对象转换为两倍?

时间:2019-07-15 06:24:41

标签: c# casting

如果将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

1 个答案:

答案 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的更多信息。