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
循环。