【问题标题】:C# Catch bool exception when using returnC#使用return时捕获bool异常
【发布时间】:2009-09-22 21:53:23
【问题描述】:

我正在使用下面的代码,偶尔 boolUpdate 不是 TRUE 或 FALSE 并且我得到一个异常,我不能用 TRY CATCH 块包围它,因为它正在使用“return”,我怎样才能正确地捕捉到这个?

if (!Boolean.Parse(boolUpdate)) return true;

【问题讨论】:

    标签: c# try-catch


    【解决方案1】:

    改用Boolean.TryParse怎么样?

    bool result = false;
    Boolean.TryParse( boolUpdate, out result );
    return !result;
    

    【讨论】:

    • 当我使用 TryParse 时,我收到错误“方法 'TryParse' 没有重载需要 '1' 参数”。我只是尝试了“if (!Boolean.TryParse(boolUpdate)) return true;”,我错过了什么吗?谢谢
    • @Jade 仔细查看示例。它需要两个参数!
    • 您缺少设置为值的out参数,返回值表示布尔值解析成功。
    • @tvanfosson:感谢编辑!我刚刚添加了一些代码,但保留了你的代码。
    • 我想这取决于期望的输入。如果返回值为 1 怎么办?由于 TryParse 需要一个字符串,这不会被翻译成 FALSE 吗?例如,Convert.ToBoolean 接受很多不同的输入,例如整数
    【解决方案2】:

    首先,一般情况:仅仅因为你从一个块中返回并不意味着你不能把它放在一个 try/catch 中:

    try
    {
        if ( whatever )
            return true;
    }
    
    catch ( Exception E )
    {
        HandleMyException( E );
        return false;
    }
    

    ...这是完全合法的。同时,正如其他海报所写,TryParse() 可能是您在这种特定情况下想要的。

    【讨论】:

    • catch 中的异常 E 是不必要的。
    • @pho3nix:但在调试时很方便。
    • 调试到catch时,可以悬停catch关键字来查看抛出的异常。但是在示例中处理了异常,因此在这种情况下实际上是必要的。
    • 我添加了 HandleMyException() 以响应@pho3nix 的观察......也就是说,如果我要明确声明它,我应该明确地 do 使用它。
    【解决方案3】:

    只有当字符串为'true'时才会返回true,不会产生异常。

            bool value;
            return bool.TryParse(boolUpdate, out value) && value;
    

    【讨论】:

      【解决方案4】:

      当 boolUpdate 不包含 TRUE 或 FALSE 时,你应该捕获异常,但是当这种情况出现时你想做什么?您不想忽略异常,不是吗,因为我觉得您无论如何都想从方法中返回?

      您可以使用Boolean.TryParse,而不是使用Boolean.Parse,如果 Parse 操作失败(例如,您的案例中的 boolUpdate 参数不包含 true 或 false),它将返回 false。

      或者,您可以这样做:

      try
      {
         return Boolean.Parse (boolUpdate)
      }
      catch(FormatException ex )
      {
         return false;
      }
      

      但是,我更喜欢使用 TryParse:

      bool result;
      bool containsBool = Boolean.TryParse (boolUpdate, out result);
      return containsBool && result;
      

      【讨论】:

        【解决方案5】:

        你可以尝试使用Boolean.TryParse...它不会抛出,如果解析成功则将解析后的值放入out参数中,否则将具有默认值,如果解析成功也将返回true成功。

         string blah = "true";
         bool val;
         Boolean.TryParse( blah, out val);
         return val;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          • 2012-01-30
          • 2021-12-08
          • 2016-12-16
          • 1970-01-01
          相关资源
          最近更新 更多