2013-05-01 53 views
4

我想了解此代码段:if语句没有花括号后面会发生什么?

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环和两个return S),为什么没有有大括号?

+0

此,如果没有代码的多行。即使这样做了,它仍然会返回。 – 2013-05-01 18:38:50

+4

我真的不明白为什么人们会低估这一点。 – Jonesopolis 2013-05-01 18:44:42

+0

@Jonesy:我是eather,当我认为-4时,我投了赞成票?这是一个简单的问题,但仍然有效。 – Cemafor 2013-05-01 19:24:53

回答

5

如果if语句的代码

一个以上的线没有。第一个if声明的正文仅为:return false;。其余的部分是在if机构结束之后。

5

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

+3

这也是一个很好的例子,为什么很多人推荐你总是包含大括号,即使你的if语句只有一行代码。 – 2013-05-01 18:45:50

+1

Nah。不必要。浪费时间添加未使用的大括号。我们一些懒惰的程序员讨厌增加混乱。 – jacknad 2013-05-01 19:52:18

+0

@jacknad没有大声笑。即使是一行添加大括号也是不好的做法。至少在C#/ javascript世界中。我同意你在理论上的说法,但在其他开发人员触及你的代码的现实世界中(是的,他们也应该知道),这只会增加更多的困惑。只需添加大括号即可。我甚至会说,如果你有一个if/else,那么它们都有一行代码,那么这很好,但是如果你有一个if语句没有curly和else,否则如果和他们在一起,看起来很混乱。 – jdmdevdotnet 2017-10-23 16:34:54

1

IF声明不超过一行代码。如果其他代码针对的是IF语句,则它们从不执行,因为代码在IF之后的第一行始终返回false。

2

这是一样的:

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

的其他简单的心不是必要的,因为它不会由于返回执行,如果IF语句评估为真

+0

注意:该方法的其余部分仅在else中,因为第一个'if'将用'return false;'语句退出函数。否则,即使第一个“if”为真,“for”循环仍然会被执行。 – Cemafor 2013-05-01 19:22:32

4

如果不是活得用If语句括住任何大括号,仅在If语句下考虑一个语句。

在这个例子中,只会执行一个语句:“return false;”

7

的代码是相同的:

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

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

1

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

这意味着如果语句没有大括号,只会在if条件(语句正文)之后的代码行被执行。其他一切都不属于声明主体,因此不会被执行。

相同的作品与其他如:

if(SomeCompare()) 
return false; 
else 
return true; 
相关问题