【问题标题】:how to copy a value from float? to float, and put zero if the float? is null?如何从浮点数复制一个值?浮动,如果浮动则置零?一片空白?
【发布时间】: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.Longfloat,它不可能是null。如果您的数据中可以包含null,则应为Nullable<float>(与float? 相同)。
  • 让我帮助您了解为什么会出现编译器错误“无法将类型 'object' 隐式转换为 'float'”。您使用(object) 转换将行的右侧转换为object 的类型。然后你将这个object 传递给StartPosLongitude,它似乎是float 类型。您不能这样做,您不能将object 放入float 变量中。如果您删除 (object) 演员表,错误应该会消失。

标签: c# casting type-conversion


【解决方案1】:

我认为

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

应该是

StartPosLongitude = time.StartPosition.Position.Long.HasValue ? time.StartPosition.Position.Long.Value : 0f;

因为 time.StartPosition.Position.Longfloat? 的类型 - 否则

但如果 time.StartPosition.Position.Long 为空则输入 0

不可能发生。

【讨论】:

  • 编译器无法识别.HasValue
  • 只做StartPosLongitude = time.StartPosition.Position.Long ?? 0会更短
  • @daniell89 表达式 time.StartPosition.Position.Long ?? 0 的类型是 float,而不是 float?,所以这里没有将 float? 分配给 float
  • 编译器怎么可能无法识别.HasValuereferencesource.microsoft.com/#mscorlib/system/…
  • @daniell89 您应该将float? test = 1; float result = test ?? 0; 粘贴到Visual Studio 中并查看它是否有效,我想我无法仅通过解释说服您。
【解决方案2】:

你可以这样做

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

【讨论】:

    【解决方案3】:
     StartPosLongitude = time.StartPosition.Position.Long != null ? (float)time.StartPosition.Position.Long : 0f;
    

    【讨论】:

      【解决方案4】:

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

      如果你要将浮点数转换为对象,它将返回对象。但是 StartPosLongitude 是浮动的?类型。所以它生成和编译错误。

      如果你想转换那个浮点数?对象并分配给 StartPosLongitude 变量。然后将 StartPosLongitude 声明为对象类型。否则目前这两个变量都是浮动的?输入。

      【讨论】:

      • 不,StartPosLongitude 是浮动而不是浮动?
      猜你喜欢
      • 2013-04-01
      • 2010-10-06
      • 2021-03-29
      • 2021-01-11
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2012-10-07
      相关资源
      最近更新 更多