【发布时间】:2017-03-22 10:20:54
【问题描述】:
我有这个代码:
StartPosLongitude = (object)time.StartPosition.Position.Long ?? 0
它没有编译错误:
无法将类型“object”隐式转换为“float”
StartPosLongitude 是这样声明的:float StartPosLongitude;
time.StartPosition.Position.Long 由 wsdl 返回并且是浮点类型?有时为空。
错误告诉我我正在尝试将对象转换为浮点数,但这不是我正在做的。
在我看来,我试图将浮点数投射到一个对象上。
那么为什么编译器会告诉我其他信息呢?
这样做的正确方法是什么,我需要将 time.StartPosition.Position.Long 的值放入 StartPosLongitude 但如果 time.StartPosition.Position.Long 为空,则放入 0。
编辑 time.StartPosition.Position.Long 的类型是 float? 不是 float
【问题讨论】:
-
浮点数如何为空?如果类型是可以为空的浮点数(浮点数?),它只能为空,当然
-
@fubo 在问题中你可以发现它是float类型
-
只需删除
(object)演员表(为什么会在那里?) -
如果
time.StartPosition.Position.Long是float,它不可能是null。如果您的数据中可以包含null,则应为Nullable<float>(与float?相同)。 -
让我帮助您了解为什么会出现编译器错误“无法将类型 'object' 隐式转换为 'float'”。您使用
(object)转换将行的右侧转换为object的类型。然后你将这个object传递给StartPosLongitude,它似乎是float类型。您不能这样做,您不能将object放入float变量中。如果您删除(object)演员表,错误应该会消失。
标签: c# casting type-conversion