当输入为空时,处理Parse to Float

A D*_*per 4 c#

我想解析一个字符串浮动.当字符串为null时,它将传递0(作为浮点值).

我正在做这样的解析:

aeVehicle.MSRP = float.Parse((drInvetory["MSRP"] ?? "0").ToString());
Run Code Online (Sandbox Code Playgroud)

哪个错误:

ERROR MESSAGE : Input string was not in a correct format.
ERROR SOURCE :    at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt)
   at System.Single.Parse(String s, NumberStyles style, NumberFormatInfo info)
   at System.Single.Parse(String s)
Run Code Online (Sandbox Code Playgroud)

请建议处理这种情况的最佳方法.

Tim*_*ora 9

如果drInvetory["MSRP"]来自a DataRow,则null合并运算符在与之比较时不会计算为true DBNull,因此float解析将失败.您可以比较DBNull.Value或使用float.TryParse().

来自原始代码

aeVehicle.MSRP = float.Parse(drInvetory["MSRP"] == DBNull.Value ? "0" : drInvetory["MSRP"].ToString());
Run Code Online (Sandbox Code Playgroud)

就个人而言,我会检查DBNull然后转换为浮动(或unbox到精确类型,然后转换).这节省了相对昂贵的字符串解析.

更好

aeVehicle.MSRP = drInvetory["MSRP"] == DBNull.Value ? default( float ) : 
(float)drInvetory["MSRP"];
Run Code Online (Sandbox Code Playgroud)

SQL-CLR类型映射:http://msdn.microsoft.com/en-us/library/bb386947.aspx
另请参阅:.NET中十进制,浮点数和双精度数之间的差异?

  • 实际上,`DBNull`对**这么多*级别来说是一个巨大的痛苦. (3认同)
  • @Petar不,它返回`object`.`object`可以与`string`进行null合并 - 结果是`object`表达式; 那么现有的代码为`Parse`调用`.ToString()`.有了这些信息,我们无法对"drInvetory ["MSRP"]实际上*是*的假设做出任何假设.如果它实际上是盒装的"浮动",那么我同意"更好".如果它实际上是一个*恰好具有数字外观值*的字符串,那么`Parse`. (2认同)