首页 > 解决方案 > 为什么不能将具有浮点值的对象强制转换为双精度值?

问题描述

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

标签: c#casting

解决方案


隐式数值转换

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,显然不是在这种情况下。


更多关于这里的转换。


推荐阅读