c# - 为什么不能将具有浮点值的对象强制转换为双精度值?
问题描述
如果将浮点数分配给双精度浮点数,它会接受它,但如果浮点数首先分配给一个对象然后强制转换为双精度浮点数,则会给出 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
解决方案
隐式数值转换
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
,显然不是在这种情况下。
更多关于这里的转换。
推荐阅读
- java - 为什么不能用 AtomicBoolean 标志中断可运行任务?
- reactjs - 使用 useRef 钩子接收孩子的 ref 后如何重新渲染父组件?
- breakpoints - 如何在 LLDB 中使用硬件断点?
- python - Scrapy Splash点击带有javascript href的链接
- javascript - 数据未从子组件刷新到父组件
- python - 我的 python 脚本如何检查 pypi repo 上是否有新版本可用?
- ruby - 如果 key 存在,则检查 hash;如果没有,则创建数组并附加值
- java - Java 循环遍历 arraylist 并使用匹配的代码删除 item 类型的任何对象
- c - 读取文件并将不带注释的相同内容保存在新文件中
- model-view-controller - 如何在局部视图中加载数据表