C# if语句后面没有大括号会发生什么情况?

C# if语句后面没有大括号会发生什么情况?,c#,if-statement,curly-braces,C#,If Statement,Curly Braces,我试图理解以下代码片段: 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]

我试图理解以下代码片段:

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;
    }
}
类工作者
{
公共bool DoThisJob(字符串job,int numberOfShifts)
{
如果(!String.IsNullOrEmpty(currentJob))
返回false;
for(int i=0;i
如果此
If
语句有多行代码(包括
for
循环和两个
return
s),为什么它没有大括号

如果此if语句包含多行代码


没有。第一个
if
语句的主体仅为:
返回false。其余部分在
if
正文的末尾。

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

if
语句的代码行不超过一行。如果其他代码用于该
If
语句,则它们永远不会执行,因为该代码总是在
If

后的第一行返回false,这与:

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;
    }
}
public bool DoThisJob(字符串job,int numberOfShifts)
{
如果(!String.IsNullOrEmpty(currentJob))
{
返回false;
}
其他的
{
for(int i=0;i

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

如果if语句没有任何花括号,那么if语句下只会考虑一条语句


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

代码相当于:

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;
    }
}
类工作者
{
公共bool DoThisJob(字符串job,int numberOfShifts)
{
如果(!String.IsNullOrEmpty(currentJob))
{
返回false;
}
for(int i=0;i
如果没有花括号,则只有下一个语句是if的一部分。对于
For
循环,
if
是下一条语句,因此它包含了所有内容。

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

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

同样适用于if-else:

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

如果没有超过一行的代码,则为。即使它真的这么做了,它还是会回来的。我真的不明白为什么人们会对这个投反对票。@Jonesy:我吃东西,当它降到-4时,我投了反对票?这是一个简单的问题,但仍然有效。这也是一个很好的例子,说明为什么很多人建议您始终使用大括号,即使您的
if
语句只有一行代码。不。没有必要。浪费时间添加未使用的大括号。我们中的一些懒惰的程序员讨厌增加的混乱。@jacknad不,哈哈。即使是一行,也不加花括号是不好的做法。至少在C#/javascript世界是这样。我在理论上同意你所说的,但在现实世界中,其他开发人员接触你的代码(是的,他们也应该知道),这只会增加更多的混乱。只需添加花括号。我甚至会说,若你们有一个if/else语句,两个都有一行代码,那个么这很好,但若你们有一个if语句,但并没有curly和else/else if,这看起来很混乱。注意:该方法的其余部分在else中,只是因为第一个
if
将退出函数,返回false语句。否则,即使第一个
if
为true,仍将执行
for
循环。