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

Sha*_*ami 9 c# casting

如果将浮点数分配给双精度数,它将接受它,但是如果首先将浮点数分配给一个对象,然后将其强制转换为双精度数,则将给出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
Run Code Online (Sandbox Code Playgroud)

Joh*_*nny 8

隐式数值转换

float f = 12.4f;
double d = f;//this is ok
Run Code Online (Sandbox Code Playgroud)

拆箱转换

object o = f;
double d1 = (double)o;//doesn't work, (System.InvalidCastException)
Run Code Online (Sandbox Code Playgroud)

对non_nullable_value_type的拆箱操作包括以下步骤:首先检查对象实例是给定的non_nullable_value_type的装箱值,然后将其复制出实例。

换句话说,它检查是否o从中装箱double,显然不是在这种情况下。


有关转换的更多信息,请点击此处

  • Nitpick:从“ float”到“ double”的隐式转换不会导致数据丢失,因为“ double”具有更高的精度-每个“ float”都有一个精确的表示为“ double”的表示形式。格式化为以10为基数显示时,该数字可能看起来有所不同,但这与数据丢失不同。 (2认同)