【问题标题】:pros and cons of TryCatch versus TryParseTryCatch 与 TryParse 的优缺点
【发布时间】:2011-01-26 18:32:51
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net tryparse try-catch


    【解决方案1】:
    • TryParse 会比捕获异常更快
    • TryParse 表示预期 - 这里没有发生任何异常,只是您怀疑您的数据可能无效。
    • TryParse 没有对正常控制流使用异常处理

    基本上,使用TryParse :)

    顺便说一句,你的代码可以改写为:

    public static double GetDouble(object input, double defaultVal)
    {
        double parsed;
        return double.TryParse(input.ToString(), out parsed)) ? parsed : defaultVal;
    }
    

    【讨论】:

    • GM Jon,tryparse() 的内部实现是什么?是不是这样:试试 { Parse();返回真; } 捕捉(异常){ 返回错误; }
    • TryParse 转换为字符串(实际上是一个 char*),尝试将该字符串解析为一个数字(通过字符比较),然后进行各种其他检查(范围等)以确保数字是正确的类型。它周围没有 try catch 块:)
    【解决方案2】:

    TryParse 在性能方面比 TryCatch 更高效。

    【讨论】:

      【解决方案3】:

      让 Parse 方法在输入错误时抛出异常是一个设计缺陷。当您从用户那里获取数据时,错误的输入是预期的行为。异常抛出是昂贵的,它不是你希望在你的代码中经常发生的事情。

      值得庆幸的是,Microsoft 意识到了他们的错误并添加了 TryParse 方法。 TryParse 确实不会产生错误输入时抛出异常的开销,但缺点是它必须返回两条数据,因此使用起来感觉有点尴尬。

      现在,如果他们没有首先创建损坏的 Parse 实现,那么 TryParse 将被称为 Parse。

      【讨论】:

        【解决方案4】:

        TryParse 更快,通常更好,但我建议在框架和后端编程中使用 TryCatch 方法,因为您可以向客户端提供有关错误的更多信息:

        public double GetAge()
        {
           try
           {
              var input = _dataProvider.GetInput();
              return Convert.ToDouble(input);
           }
           catch(Exception ex)
           {
              throw new MyBackendException(ex);
           }
        }
        

        【讨论】:

        • 您仍然可以使用 TryParse 并在错误数据上引发您自己的异常。事实上,您应该这样做,如果没有其他目的,则可以进行跟踪。
        • 好的,但是您只会收到关于“不良数据”的一般性消息,并且您将失去有关数据不良原因的信息。 InvalidCastException 或 FormatException 或 .在给定框架上编程我想尽可能多地了解错误信息。无论如何,当不良数据可能来自 Web 服务或存储时,这不是“预期行为”,必须抛出 IMO 异常。
        猜你喜欢
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 2016-10-29
        • 2023-04-04
        • 2013-07-30
        相关资源
        最近更新 更多