将DBNULL值解析为double
我使用以下行将datarow
值转换为double。
double.parse(Convert.ToString(datarow));
如果datarow
是DBNULL
,我会收到以下exception:
‘double.Parse(Convert.ToString(data))’引发了‘System.FormatException’类型的exception
如何在不使用tryparse.
情况下处理这个tryparse.
另一种方法是检查datarow
是否为DBNull
:
double d = datarow is DBNull ? 0 : double.Parse(Convert.ToString(datarow));
这样,您无需检查DBNull.Value
DBNull
无法DBNull
或解析为double
(或int
, decimal
等),因此在尝试解析之前必须检查datarow
是否为DBNull
。 它应该是使用三元运算符的oneliner:
doubleValue = datarow == DBNull.Value ? 0.0 : double.Parse(Convert.ToString(datarow));
对于这种情况,我有一堆转换实用程序方法,格式与此类似。
// tries to convert a general object to double, if a defaultValue is provided, it will silently fall back to it, if not, it will throw exceptions public static double ToDouble(object obj, double? defaultValue = null) { if (obj == null || obj == "" || obj == DBNull.Value) return 0.0; try { if (obj is string) return double.Parse((string)obj); return Convert.ToDouble(obj); } catch { if (defaultValue != null) return defaultValue.Value; throw; } }
我使用这种弱到强类型的转换实用程序,主要是在我使用ADO.NET的东西或其他弱类型的接口时,比如从Excel读取数据。
在我的真实代码中,我还允许传递CultureInfo
进行字符串转换,并执行其他一些操作,例如规范化小数符号等,以实现最佳格式容差。
当然可以通过捕获特定的exception类型(如FormatException
来改进general catch子句,但是对于我的需求它可以很好地工作。