处理转换失败的最佳方法

本文关键字:最佳 方法 失败 转换 处理 | 更新日期: 2023-09-27 18:28:34

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

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;
}

第二版:TryParse是我想要的。

处理转换失败的最佳方法

您最好使用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
}

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

double val;
if(double.TryParse(values8[x], out val))
{
     Console.WriteLine("Parsing successful");
}
else
{
   Console.WriteLine("Parsing failed");
}

根据您的编辑,您需要这个:

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