【问题标题】:Method with a bool return带有布尔返回的方法
【发布时间】:2012-09-19 10:23:24
【问题描述】:

我正在创建一个返回值为bool 的方法,但遇到了问题:

这行得通

private bool CheckAll()
{
  //Do stuff
  return true;
}

但这不是,如果返回值在 IF 语句中,则该方法无法检测到该返回值。

private bool CheckAll()
{
  if (...)
  {
    return true;
  }
}

我该如何解决这个问题?

【问题讨论】:

  • 所有代码分支都应该返回一些值,例如如果 if 中的条件为假,编译器不知道在这种情况下要返回什么。您应该在 if 块之外显式指定返回(默认)值。

标签: c# if-statement return


【解决方案1】:
private bool CheckAll()
{
    if ( ....)
    {
        return true;
    }

    return false;
}

当 if 条件为 false 时,该方法不知道应该返回什么值(您可能会收到类似“并非所有路径都返回值”的错误)。

作为CQQL pointed out,如果你的意思是在你的if条件为真时返回真,你可以简单地写:

private bool CheckAll()
{
    return (your_condition);
}

如果您有副作用,并且想在返回之前处理它们,则需要第一个(长)版本。

【讨论】:

    【解决方案2】:

    长版:

    private bool booleanMethod () {
        if (your_condition) {
            return true;
        } else {
            return false;
        }
    }
    

    但是由于您使用条件的结果作为方法的结果,您可以将其缩短为

    private bool booleanMethod () {
        return your_condition;
    }
    

    【讨论】:

      【解决方案3】:
           public bool roomSelected()
          {
              int a = 0;
              foreach (RadioButton rb in GroupBox1.Controls)
              {
                  if (rb.Checked == true)
                  {
                      a = 1;
                  }
              }
              if (a == 1)
              {
                  return true;
              }
              else
              {
                  return false;
              }
          }
      

      这就是我解决问题的方法

      【讨论】:

        【解决方案4】:

        一种更简单的解释方式,

        public bool CheckInputs(int a, int b){
        public bool condition = true;
        
        if (a > b || a == b)
        {
           condition = false;
        }
        else
        {
           condition = true;
        }
        
        return condition;
        }
        

        【讨论】:

          【解决方案5】:

          您缺少其他部分。如果所有条件都为假,则 else 将在您尚未声明并从 else 分支返回任何内容的地方工作。

          private bool CheckALl()
          {
            if(condition)
            {
              return true
            }
            else
            {
              return false
            }
          }
          

          【讨论】:

            【解决方案6】:

            使用此代码:

            public bool roomSelected()
            {
                foreach (RadioButton rb in GroupBox1.Controls)
                {
                    if (rb.Checked == true)
                    {
                        return true;
                    }
                }
                return false;
            }
            

            【讨论】:

              【解决方案7】:

              当你问这个问题时,我确信这些选项在 C# 中都不可用,但现在你可以这样做:

              // Return with ternary conditional operator.
              private bool CheckAll()
              {
                  return (your_condition) ? true : false;
              }
              
              // Alternatively as an expression bodied method.
              private bool CheckAll() => (your_condition) ? true : false;
              

              【讨论】:

              • 这不会编译。请不要提供无效的 C# 代码。
              猜你喜欢
              • 2011-04-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-03
              • 2021-02-12
              • 2015-01-22
              • 1970-01-01
              相关资源
              最近更新 更多