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

Jef*_*ady 0 c#

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

double val = Convert.ToDouble(values8[x]) + 24837;
Run Code Online (Sandbox Code Playgroud)

如果values8[x]无法转换为Double应用程序崩溃错误Input string was not in a correct format.

如何测试这一点,并设置valDBNull.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;
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:TryParse我正在寻找.

Dar*_*rov 5

你最好使用这种double.TryParse方法而不是尝试和捕获哪些可能更昂贵:

double val;
if (double.TryParse(values8[x], out val))
{
    // you can safely use the val variable here
}
else
{
    // parsing failed
}
Run Code Online (Sandbox Code Playgroud)

如果你事先知道,你也有可能指定文化(你知道小数分隔符对于不同的文化可能会有所不同,......):

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
}
Run Code Online (Sandbox Code Playgroud)

  • @Rotem http://stackoverflow.com/questions/150114/parsing-performance-if-tryparse-try-catch (2认同)
  • @Rotem不,`TryParse`没有引起异常.`Number :: ParseNumber`实际上是解析字符串(无论如何,因为`Numer`是`mscorlib.dll`中的内部类,它的实现细节可能会改变). (2认同)