将 DBNULL 值解析为 double
Parsing a DBNULL value into double
我使用以下行将 datarow
值转换为双精度值。
double.parse(Convert.ToString(datarow));
如果 datarow
是 DBNULL
,我得到以下异常:
'double.Parse(Convert.ToString(data))' threw an exception of type 'System.FormatException'
如何在不使用 tryparse.
的情况下处理这个问题
DBNull
无法转换或解析为 double
(或 int
、decimal
等),因此您必须检查 datarow
在尝试解析之前是 DBNull
。它应该是一个使用三元运算符的单行代码:
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
进行字符串转换,并做一些其他的事情,如规范化小数符号等,以实现最佳的格式容错性。
一般的 catch 子句当然可以通过捕获特定的异常类型来改进,比如 FormatException
,但对于我的需要来说它工作得很好。
另一种方法是检查 datarow
是否为 DBNull
:
double d = datarow is DBNull ? 0 : double.Parse(Convert.ToString(datarow));
这样,您就不需要检查 DBNull.Value
我使用以下行将 datarow
值转换为双精度值。
double.parse(Convert.ToString(datarow));
如果 datarow
是 DBNULL
,我得到以下异常:
'double.Parse(Convert.ToString(data))' threw an exception of type 'System.FormatException'
如何在不使用 tryparse.
DBNull
无法转换或解析为 double
(或 int
、decimal
等),因此您必须检查 datarow
在尝试解析之前是 DBNull
。它应该是一个使用三元运算符的单行代码:
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
进行字符串转换,并做一些其他的事情,如规范化小数符号等,以实现最佳的格式容错性。
一般的 catch 子句当然可以通过捕获特定的异常类型来改进,比如 FormatException
,但对于我的需要来说它工作得很好。
另一种方法是检查 datarow
是否为 DBNull
:
double d = datarow is DBNull ? 0 : double.Parse(Convert.ToString(datarow));
这样,您就不需要检查 DBNull.Value