我使用以下行将datarow
值转换为double。
double.parse(Convert.ToString(datarow));
如果datarow
为DBNULL
,我将收到以下异常:
' double.Parse(Convert.ToString(数据))'抛出' System.FormatException'
类型的例外
如何在不使用tryparse.
答案 0 :(得分:4)
另一种方法是检查DBNull
是否为double d = datarow is DBNull ? 0 : double.Parse(Convert.ToString(datarow));
:
DBNull.Value
这样,您无需检查<body oncontextmenu="return false;">
答案 1 :(得分:3)
DBNull
无法转换或解析为double
(或int
,decimal
等),因此您必须检查datarow
是否为DBNull
在尝试解析它之前doubleValue = datarow == DBNull.Value ? 0.0 : double.Parse(Convert.ToString(datarow));
。它应该是使用三元运算符的oneliner:
powershell -Command "gci c:\test -recurse |% { $_.fullname +' '+ $($_|get-acl|select -expand owner).Split('\')[1]}
答案 2 :(得分:3)
对于此类场景,我有一堆转换实用程序方法,格式与此类似。
// 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
进行字符串转换,并执行其他一些操作,例如规范化小数符号等,以实现最佳格式容差。
当然可以通过捕获FormatException
之类的特定异常类型来改进general catch子句,但是根据我的需要,它可以很好地工作。