处理转换失败的最佳方法?

时间:2013-08-22 14:41:46

标签: c#

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

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正是我所寻找的。

3 个答案:

答案 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);