2017-02-06 3 views
2

В настоящее время я изучаю условные конструкции. Поправьте меня, если я ошибаюсь, но еще если и еще (если() {}) это то же самое ... Пример:C# else if confusion

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

И

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

Являются ли эти вещи так же? И если да, то почему иначе, если существует, если я могу написать это «второй способ» (второй пример, который я написал)?

+0

Нет, они не то же самое.Они имеют тот же эффект в вашем примере, но что, если у вас было третье условие, если условие? – TZHX

+0

@TZHX Мне пришлось бы написать еще один {if() {}}? Или я не могу иметь 2 elses? – peter

+0

@peter: И как это будет выглядеть? И как это выглядело бы, если бы вы добавили еще больше условий? – David

ответ

5

Да, они фактически идентичны.

Причина, по которой существует инструкция «else if», заключается в создании более чистого кода, если есть много условий для проверки. Например:

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 
      } 
     } 
    } 
} 
+0

Хотя давайте будем честными, такие случаи, как для 'switch'. – Andrew

+3

Вы не всегда можете использовать случай переключения - как в моем примере, c, d и e являются переменными, а не константами, поэтому вы не можете использовать их в операторах case. – Tim

+0

@ Tim ok, но не могу ли я добавить все эти ifs только в один контур? так что это будет выглядеть примерно так ', если (а == Ь) {// бла } еще { , если (а == с) {// бла} если (а == d) {// blah} if (a == e) { // blah } } ' – peter

3

почему else if существует

Это не делает. Это не ключевое слово или конструкция самостоятельно. Ваши два примера идентичны, за исключением того, что во втором случае вы добавили лишние скобки и пробелы в код.

if и else оба просто сопровождаются одним утверждением. В первом примере оператор после else является:

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

Второй пример просто заворачивает, что то же самое утверждение в фигурные скобки, и добавляет новую строку в начале. Новая строка игнорируется, поэтому она не изменяет семантику, и поскольку код уже, один оператор, обертывающий его в фигурные скобки, никак не меняет его.

+0

ohhhhhhhhhhhhh теперь я получаю это ... Так что в основном «else if» просто использует преимущество, что вам не нужно использовать фигурные скобки, если это одна строка? И почему еще {if() {}} == else if? – peter

0

В основном это делает код чище, легче читать, делает отступы лучше, особенно если у вас есть какие-либо соглашения о длине строк в строках (а если нет, то у вас есть тридцать отступов в выражении big if, такая боль читается). Это также экономит место, несколько дополнительных символов и отступов по тысячам строк могут быть не такими, но зачем использовать его, если вам это не нужно. Когда код компилируется, они в любом случае будут одинаковыми в DLL.

2

Строго говоря, нет такой вещи, как заявление 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 так обычно потому, что он дополняет логический поток кода. Это, и это выглядит намного красивее.

+0

Последнее заявление должно быть переформулировано на «DoSomethingCompletelyDifferent» - просто шутите: o) –