在我的应用中,我有以下几行:
double val = Convert.ToDouble(values8[x]) + 24837;
如果values8[x]
无法转换为Double
,则应用会因错误Input string was not in a correct format
而崩溃。
如何对此进行测试,如果转换失败,请将val
设置为DBNull.Value
?试试看?这样的事情会被接受吗?
编辑:这是我正在尝试做的事情
try
{
double val = Convert.ToDouble(values8[x]) + 24837;
com.Parameters.Add("@p1", OleDbType.Date, 255).Value = DateTime.FromOADate(val);
}
catch (exception e)
{
com.Parameters.Add("@p1", OleDbType.Date, 255).Value = DBNull.Value;
}
EDIT2:TryParse
正是我所寻找的。 p>
答案 0 :(得分:5)
你最好使用double.TryParse
方法而不是尝试捕捉哪个更昂贵:
double val;
if (double.TryParse(values8[x], out val))
{
// you can safely use the val variable here
}
else
{
// parsing failed
}
如果你事先知道,你也有可能指定文化(你知道不同文化的小数分隔符可能会有所不同,......):
double val;
var culture = new CultureInfo("fr-FR");
if (double.TryParse(values8[x], NumberStyles.None, culture, out val))
{
// you can safely use the val variable here
}
else
{
// parsing failed
}
答案 1 :(得分:1)
double有一个应该使用的TryParse方法。如果解析成功,则val将获得值,否则不会将值赋给val。不会抛出异常
double val;
if(double.TryParse(values8[x], out val))
{
Console.WriteLine("Parsing successful");
}
else
{
Console.WriteLine("Parsing failed");
}
答案 2 :(得分:1)
根据你的编辑,你需要这个:
double val;
if (!Double.TryParse(values8[x], out val))
com.Parameters.Add("@p1", OleDbType.Date, 255).Value = DBNull.Value;
else
com.Parameters.Add("@p1", OleDbType.Date, 255).Value = DateTime.FromOADate(val + 24837);