0

在我的应用程序中,我有以下行:

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是我一直在寻找的。

4

3 回答 3

5

您最好使用该double.TryParse方法而不是 try and catch ,这可能会更昂贵:

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
}
于 2013-08-22T14:43:30.813 回答
1

double 有一个应该使用的 TryParse 方法。如果解析成功,则 val 将获得值,否则不会将值分配给 val。不会抛出异常

double val;

if(double.TryParse(values8[x], out val))
{
     Console.WriteLine("Parsing successful");
}
else
{
   Console.WriteLine("Parsing failed");
}
于 2013-08-22T14:45:26.227 回答
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);
于 2013-08-22T14:57:29.527 回答