如果内部if为true,则C#跳过if语句的其余部分
本文关键字:if 语句 余部 跳过 内部 true 如果 | 更新日期: 2023-09-27 18:26:29
我的代码如下:
public void Method()
{
if (flagIsUp)
{
if (x = 1)
code here;
if (y = 2)
code here;
if (z = 3)
code here;
}
if (buttonPressed)
{
code here;
}
}
如果(y=2)为TRUE,它将跳到"if(flagIsUp)"块的其余部分(即它将跳过"if(z=3)"语句),然后继续使用该方法(即转到"if(buttonPressed)"?我试着打破;,但这需要一个循环。使用退货;简单地结束Method(),跳过代码的其余部分,这不是我的意图。
对于您所拥有的构造,没有简单的关键字可以使用。您应该将其修改为使用else
:
if (x = 1)
code here;
else if (y = 2)
code here;
else if (z = 3)
code here;
首先,=赋值,=测试相等性。
也就是说,大多数时候,包括这里,else
应该足够了:
if (y == 2)
code here;
else if (z == 3)
code here;
public void Method()
{
if (flagIsUp)
{
if (x = 1)
{
code here;
}
else if (y = 2)
{
code here;
}
else if (z = 3)
{
code here;
}
}
if (buttonPressed)
{
code here;
}
}
使用else
来提供此
if (y == 2) {
code1;
} else{
if (z == 3) {
code2;
}
code3;
}
原始代码与我的标记为清晰
if (y = 2)
code1;
if (z = 3)
code2;
code3;
听起来你想要一个其他
if ( y == 2 ) { /* do stuff */ }
else if ( z == 3) { /* do other stuff */ }
您可以在if
前面使用else
,但如果需要,我建议您加上额外的大括号。
public void Method()
{
if (flagIsUp)
{
if (x == 1)
{
code here;
}
if (y == 2)
{
code here;
}
else if (z == 3)
{
code here;
}
}
if (buttonPressed)
{
code here;
}
}
将代码移动到一个函数:
if (flagIsUp)
{
doStuff(x, y, z);
}
...
void doStuff(int x, int y, int z)
{
if (x == 1)
{
// do stuff
return;
}
if (y == 2)
{
// do stuff
return;
}
if (z == 3)
{
// do stuff
return;
}
}
以下是关于它们如何在后端运行的一些答案和解释(因为从长远来看,了解为什么会对您有所帮助)
提出的一个简单答案是在每个后续的if
语句之前使用else
,比如
public void Method()
{
if (flagIsUp)
{
if (x == 1)
//code here;
else if (y == 2)
//code here;
else if (z == 3)
//code here;
}
if (buttonPressed)
{
//code here;
}
}
编译后运行的结果更像
public void Method()
{
if (flagIsUp)
{
if (x == 1)
{
//code here;
// Excecution skips to 'x==1 fastforward'
}
else
{
if (y == 2) // intentional indentation
{
//code here;
// Excecution skips to 'y==1 fastforward'
}
else
{
if (z == 3) // intentional indentation
{
//code here;
}
} // y==2 fast forward
} // x==1 fast forward
}
if (buttonPressed)
{
code here;
}
}
这个排列显示了if-else-if如何在条件中"缩进"子例程。如果A为真,那么它将跳过B和C的代码。如果A为假,而B为真,则跳过C。如果A和B为假,则检查C。
实现这一点的另一种方法是将此检查放入其自己的私有方法中,并在满足真实条件时从中返回
public void Method()
{
if (flagIsUp)
DoFlagUpCheck();
if (buttonPressed)
{
//code here;
}
}
private void DoFlagUpCheck()
{
if (x == 1)
{
//code here;
return; // Stop and return to Method()
}
if (y == 2)
{
//code here;
return; // Stop and return to Method()
}
if (z == 3)
{
//code here;
return; // Stop and return to Method()
}
}
这样,代码执行将在第一个true条件下停止并从方法返回。如果A为真,则执行代码并返回,否则继续执行B…
值得考虑的一件事是,是否可以重构程序,使X、Y和Z可以在单个枚举中表示?由于x==1
、y==2
和z==3
是互斥的,因此可能有一种方法可以使这组条件更具可读性,并最终得到更像的条件
public Method()
{
if (flagIsUp)
{
switch(flagCondition)
{
case FlagX:
//code here;
break;
case FlagY:
//code here;
break;
case FlagZ:
//Code here;
break;
}
}
if (buttonPressed)
{
//code here;
}
}
最后,把最有可能的真实情况放在首位通常对性能有帮助。
您可以使用goto语句,即使它不利于代码可读性,也可以随心所欲。。。
public void Method()
{
if (flagIsUp)
{
if (x = 1)
code here;
if (y = 2){
code here;
goto Outer;
}
if (z = 3)
code here;
}
Outer:
if (buttonPressed)
{
code here;
}
}