TryCatch与TryParse的优缺点

时间:2010-03-12 10:01:34

标签: c# .net tryparse try-catch

使用以下任一方法从对象中拉出双精度的优缺点是什么?除了个人偏好之外,我正在寻找反馈的问题包括易于调试,性能,可维护性等。

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

4 个答案:

答案 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);
   }
}
相关问题