C#如果混淆,则为其他

C#如果混淆,则为其他,c#,C#,我目前正在研究条件结构。如果我错了,请纠正我,否则if和else(if(){})是同一件事。。。例如: a=5; if(a==6) { Console.WriteLine("Variable 'a' is 6"); } else if(a==5) { Console.WriteLine("Variable 'a' is 5"); } 及 这些东西是一样的吗?如果是的话,如果我可以用“第二种方式”(我写的第二个例子)来写,为什么还有其他的呢?是的,它们实际上是相同的 “else

我目前正在研究条件结构。如果我错了,请纠正我,否则if和else(if(){})是同一件事。。。例如:

a=5;
if(a==6)
{ 
   Console.WriteLine("Variable 'a' is 6");
}
else if(a==5)
{
     Console.WriteLine("Variable 'a' is 5");
}


这些东西是一样的吗?如果是的话,如果我可以用“第二种方式”(我写的第二个例子)来写,为什么还有其他的呢?

是的,它们实际上是相同的

“elseif”语句存在的原因是当有许多条件需要测试时,生成更干净的代码。例如:

if (a==b) {
   //blah
} else if (a==c) {
   //blah
} else if (a==d) {
   //blah
} else if (a==e) {
   //blah
}
比嵌套方法更干净

if (a==b) { 
    //blah
} else {    
    if (a==c) {
        //blah
    } else {
        if (a==d) {
            //blah
        } else {
            if (a==e) {
                //blah
            }
        }
    }
}
如果存在,为什么要使用else

没有。它本身不是一个关键字或构造。您的两个示例完全相同,只是在第二种情况下,您在代码中添加了一些多余的大括号和空格

if
else
后面都是一条语句。在第一个示例中,
else
后面的语句是:

 if(a==5)
{
     Console.WriteLine("Variable 'a' is 5");
}

第二个示例将同一语句用大括号括起来,并在开头添加一行新行。新行被忽略,因此它不会改变语义,并且由于代码已经是一条语句,因此用大括号将其包装在一起不会以任何方式改变它。

通常,它会使代码更干净、更易于阅读、缩进更好,特别是当您对行的字符长度有任何约定时(如果不这样做,那么在一个大的if语句中就有30个缩进,读起来很痛苦)。它还节省了空间,跨数千行的几个额外字符和缩进可能不多,但如果不需要,为什么要使用它呢。当代码编译时,它们在DLL中几乎完全相同。

严格地说,没有所谓的
else if
语句。“else if”实际上本质上是一个
else
,它有一个单独的行体,恰好是一个完全独立的
if
语句的开头。您可以将其可视化为:

var a = 5;

// This if uses a single line
if (a == 6) DoSomething();
// This else is a single line that is also a single-line if
else if (a == 4) DoAnotherThing();
// This else uses a single line as well, but is referring instead to the second if
else DoSomethingElse();
上述脚本与以下脚本相同:

if (a == 6) 
{
    DoSomething();
}
else 
{
    if (a == 4) 
    {
        DoAnotherThing();
    }
    else 
    {
        DoSomethingElse();
    }
}
甚至这个:

if (a == 6) 
    DoSomething();
else 
    if (a == 4) 
        DoAnotherThing();
    else 
        DoSomethingElse();

它之所以被写为
else if
是因为它补充了代码的逻辑流。这看起来更漂亮。

不,它们不一样。它们在您的示例中具有相同的效果,但是如果您有第三个else if条件呢?@TZHX我将不得不写另一个else{if(){}?或者我不能有另外两个,可以吗?@peter:那会是什么样子?如果你增加更多的条件,会是什么样子?然后是一个if在里面,另一个包含另一个if。你能看到会有多少个卷曲的括号吗?不仅仅是为了视觉体验,而是因为它更清楚地展示了y的意思你想要实现。不过老实说,像这样的情况就是
switch
的用途。你不能总是使用switch-case——就像在我的例子中,c、d和e是变量,而不是常量,所以你不能在case语句中使用它们。@Tim好的,但是我不能在一个其他构造函数中添加所有这些if吗?所以如果(a==b){//blah}如果(a==c){//blah}如果(a==d){//blah}如果(a==e){//blah}@peter这取决于您想要实现的逻辑。您的建议与本文中的示例完全不同answer@peter如果c==d会发生什么?然后你会同时运行id a==c,如果a==d只运行另外一个,如果你想这样做,那么你每次只测试变量,不需要另外一个。Ohhhhhhhhhhh现在我明白了…所以基本上“else-if”只是利用了一个优势,如果它是单行,你不需要使用大括号?这就是为什么else{if(){}}==else-if?最后一个语句应该重写为“doSomethingCompletlyDifferent”-只是开玩笑:o)
if (a == 6) 
    DoSomething();
else 
    if (a == 4) 
        DoAnotherThing();
    else 
        DoSomethingElse();