【问题标题】:What happens to an if statement not followed by curly braces? [closed]没有大括号的 if 语句会发生什么? [关闭]
【发布时间】:2013-05-01 18:36:39
【问题描述】:

我正在尝试理解这段代码 sn-p:

class Worker
{
    public bool DoThisJob(string job, int numberOfShifts)
    {
        if (!String.IsNullOrEmpty(currentJob))
            return false;
        for (int i = 0; i < jobsICanDo.Length; i++)
            if (jobsICanDo[i] == job)
            {
                currentJob = job;
                this.shiftsToWork = numberOfShifts;
                shiftsWorked = 0;
                return true;
            }
        return false;
    }
}

如果这个if 语句有不止一行代码(包括for 循环和两个returns),为什么它没有花括号?

【问题讨论】:

  • 这个if不超过一行代码。即使它这样做了,它还是会返回。
  • 我真的不明白为什么人们不赞成这个。
  • @Jonesy:我吃,当它下降到我认为-4时我投了赞成票?这是一个简单的问题,但仍然有效。

标签: c# if-statement curly-braces


【解决方案1】:

在 C# 中,花括号是可选的,但仅适用于第一行代码。

意味着如果语句没有大括号,则只会执行 if 条件(语句体)之后的代码行。其他所有内容都在语句主体之外,因此不会被执行。

if else 也一样:

if(SomeCompare())
return false;
else
return true;

【讨论】:

    【解决方案2】:

    代码等价于:

    class Worker
    {
        public bool DoThisJob(string job, int numberOfShifts)
        {
            if (!String.IsNullOrEmpty(currentJob))
            {
                return false;
            }
            for (int i = 0; i < jobsICanDo.Length; i++)
            {
                if (jobsICanDo[i] == job)
                {
                    currentJob = job;
                    this.shiftsToWork = numberOfShifts;
                    shiftsWorked = 0;
                    return true;
                }
            }
            return false;
        }
    }
    

    当没有大括号时,只有下一条语句是 if 的一部分。对于for 循环,if 是下一个语句,因此所有内容都包含在其中。

    【讨论】:

      【解决方案3】:

      if 语句只有一行代码。底部return false;在 if 语句之外。

      【讨论】:

      • 这也是一个很好的例子,说明为什么很多人建议您始终包含花括号,即使您的 if 语句只有一行代码。
      • 不。不必要。浪费时间添加未使用的大括号。我们中的一些懒惰的程序员讨厌增加的混乱。
      • @jacknad 没有,哈哈。即使是一行也不添加花括号是不好的做法。至少在 C#/javascript 世界中。我在理论上同意你所说的,但在其他开发人员接触你的代码并且(是的,他们也应该知道)的现实世界中,它只会增加更多的混乱。只需添加大括号。我什至会说,如果你有一个 if/else 两者都有一行代码,那很好,但如果你有一个没有 curly 和 else/else if 的 if 语句,看起来会让人困惑。
      【解决方案4】:

      如果这个 IF 语句多于一行代码

      它没有。第一个if 语句的正文只有:return false;。其余部分在if 正文结束之后。

      【讨论】:

        【解决方案5】:

        如果 If 语句中没有大括号,则在 If 语句下只考虑一个语句。

        在本例中,只会执行一条语句:“return false;”

        【讨论】:

          【解决方案6】:

          这与:

          public bool DoThisJob(string job, int numberOfShifts)
          {
              if (!String.IsNullOrEmpty(currentJob))
              {
                return false;
              }
              else
              {
                  for (int i = 0; i < jobsICanDo.Length; i++)
                      if (jobsICanDo[i] == job)
                      {
                          currentJob = job;
                          this.shiftsToWork = numberOfShifts;
                          shiftsWorked = 0;
                          return true;
                      }
                  return false;
              }
          }
          

          else 是不需要的,因为如果 if 语句的计算结果为 true,它不会因为返回而被执行

          【讨论】:

          • 注意:该方法的其余部分仅在 else 中,因为第一个 if 将使用 return false; 语句退出函数。否则即使第一个if 为真,for 循环仍会执行。
          【解决方案7】:

          IF 语句的代码不超过一行。如果其他代码用于该 IF 语句,则它们永远不会执行,因为代码总是在 IF 之后的第一行返回 false。

          【讨论】:

            猜你喜欢
            • 2022-08-14
            • 2021-04-16
            • 2022-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多