使用以下任一方法从对象中拉出双精度的优缺点是什么?除了个人偏好之外,我正在寻找反馈的问题包括易于调试,性能,可维护性等。
public static double GetDouble(object input, double defaultVal)
{
try
{
return Convert.ToDouble(input);
}
catch
{
return defaultVal;
}
}
public static double GetDouble(object input, double defaultVal)
{
double returnVal;
if (double.TryParse(input.ToString(), out returnVal))
{
return returnVal;
}
else
{
return defaultVal;
}
}
答案 0 :(得分:19)
TryParse
将比捕获异常更快TryParse
表示某些预期 - 此处没有任何异常情况发生,只是您怀疑自己的数据可能无效。TryParse
未对正常控制流使用异常处理基本上,请使用TryParse
:)
顺便说一句,您的代码可以重写为:
public static double GetDouble(object input, double defaultVal)
{
double parsed;
return double.TryParse(input.ToString(), out parsed)) ? parsed : defaultVal;
}
答案 1 :(得分:4)
TryParse比TryCatch性能更高效。
答案 2 :(得分:2)
让Parse方法在错误输入上抛出异常是一个设计缺陷。从用户接收数据时,输入错误是预期的行为。抛出异常是昂贵的,这不是您希望在代码中经常发生的事情。
值得庆幸的是,微软意识到了他们的错误,并添加了TryParse方法。 TryParse 不会导致异常抛出错误输入的开销,但缺点是它必须返回两个数据,因此使用起来感觉有点尴尬。
现在,如果他们没有首先创建破坏的Parse实现,TryParse就会被称为Parse。
答案 3 :(得分:2)
TryParse更快,通常更好但我建议在框架和后端编程中使用TryCatch方法,因为您可以向客户端提供有关错误的更多信息:
public double GetAge()
{
try
{
var input = _dataProvider.GetInput();
return Convert.ToDouble(input);
}
catch(Exception ex)
{
throw new MyBackendException(ex);
}
}