我有这个代码:
StartPosLongitude = (object)time.StartPosition.Position.Long ?? 0
编译时不会出现错误:
无法将类型“object”隐式转换为“float”
StartPosLongitude 的声明如下:
float StartPosLongitude;
该错误告诉我我正在尝试将对象转换为浮点数,但这不是我正在做的事情。
在我看来,我正在尝试将浮点数投射到物体上。
那么为什么编译器会告诉我其他信息?
正确的方法是什么,我需要将
time.StartPosition.Position.Long
的值放入 StartPosLongitude
中,但如果 time.StartPosition.Position.Long
为空,则放入 0。
编辑 time.StartPosition.Position.Long 类型为 float? 不是 float
我认为
StartPosLongitude = (object)time.StartPosition.Position.Long ?? 0
应该是
StartPosLongitude = time.StartPosition.Position.Long.HasValue ? time.StartPosition.Position.Long.Value : 0f;
或
StartPosLongitude = time.StartPosition.Position.Long ?? 0f;
因为
time.StartPosition.Position.Long
是 float?
的类型 - 否则
但如果 time.StartPosition.Position.Long 为 null,则输入 0
不可能发生。
你可以这样做
StartPosLongitude = time.StartPosition.Position.Long ?? 0
StartPosLongitude = time.StartPosition.Position.Long != null ? (float)time.StartPosition.Position.Long : 0f;
正如您提到的,wsdl 返回的 time.StartPosition.Position.Long 是浮点数? type 和 StartPosLongitude 也是 float?类型。
如果要将 float 转换为对象,它将返回对象。但是StartPosLongitude是浮动的?输入。所以它生成和编译错误。
如果你想转换该浮点数?对象并分配给 StartPosLongitude 变量。然后将 StartPosLongitude 声明为对象类型。否则当前两个变量都是浮点数?类型。