如何从浮点数复制值?浮动,如果浮动则置零?为空?

问题描述 投票:0回答:4

我有这个代码:

StartPosLongitude = (object)time.StartPosition.Position.Long ?? 0

编译时不会出现错误:

无法将类型“object”隐式转换为“float”

StartPosLongitude 的声明如下:

float StartPosLongitude;

time.StartPosition.Position.Long 由 wsdl 返回并且是 float 类型?有时为空。

该错误告诉我我正在尝试将对象转换为浮点数,但这不是我正在做的事情。
在我看来,我正在尝试将浮点数投射到物体上。

那么为什么编译器会告诉我其他信息?
正确的方法是什么,我需要将

time.StartPosition.Position.Long
的值放入
StartPosLongitude
中,但如果
time.StartPosition.Position.Long
为空,则放入 0。

编辑 time.StartPosition.Position.Long 类型为 float? 不是 float

c# casting type-conversion
4个回答
7
投票

我认为

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

不可能发生。


4
投票

你可以这样做

StartPosLongitude = time.StartPosition.Position.Long ?? 0

2
投票
 StartPosLongitude = time.StartPosition.Position.Long != null ? (float)time.StartPosition.Position.Long : 0f;

0
投票

正如您提到的,wsdl 返回的 time.StartPosition.Position.Long 是浮点数? type 和 StartPosLongitude 也是 float?类型。

如果要将 float 转换为对象,它将返回对象。但是StartPosLongitude是浮动的?输入。所以它生成和编译错误。

如果你想转换该浮点数?对象并分配给 StartPosLongitude 变量。然后将 StartPosLongitude 声明为对象类型。否则当前两个变量都是浮点数?类型。

© www.soinside.com 2019 - 2024. All rights reserved.