处理转换失败的最佳方法
本文关键字:最佳 方法 失败 转换 处理 | 更新日期: 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);