Какая-то ошибка Visual Studio 2010 или C #? Или я просто сплю? - PullRequest
6 голосов
/ 02 декабря 2011

Я только что создал простой проект с операторами if, чтобы проверить, верна ли инструкция, но потом наткнулся на что-то странное.

Это мой пример кода

 if(x ==1)
    {
      do something;
    }

 else if( x==2)
    {
      do something;
    }
else if( x==3)
    {
      do something;
    }
else if( x==4)
    {
      do something;
    }

    {
      do something;
    }

НетВы правильно прочитали.И я набрал это право тоже.Я пропустил утверждение else, но я создал для него фигурные скобки.Когда я компилирую, все работает нормально.Это какая-то ошибка?Или я просто новичок в этом?Я только хотел узнать.Спасибо за все ответы

Ответы [ 4 ]

17 голосов
/ 02 декабря 2011

Синтаксически всегда допустимо заключать в скобки любое количество операторов, включая ноль.Результат сам по себе является утверждением.

Вы используете этот факт постоянно;на самом деле, вы использовали это полдюжины раз в вашем примере.Следствием «если» всегда является одно утверждение.В вашем примере этот единственный оператор является оператором блока, который содержит другой оператор.

14 голосов
/ 02 декабря 2011

Ваш последний кодовый блок без if/else if будет выполнен.Фигурные скобки предназначены для разделения кода и не требуют, чтобы условные слова / итерации или какие-либо другие предшественники имели значение.

Для преувеличения, чтобы объяснить мою точку зрения:

{
    {
        Console.WriteLine("This works");
        int i;
    }
    // the variable i is out of scope and can't be referenced here
}

Это возможноТакже.

Согласно комментарию @ slugonamission , он поднял замечательную мысль.Блок кода также создает изоляцию области видимости для переменных, которые создаются внутри этого блока кода.

5 голосов
/ 02 декабря 2011

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

Блок вне оператора управления ничего не делает, кроме создания новой области видимости для локальных переменных. Мне нравится использовать их внутри case s, потому что дела не создают автоматически новую область.

switch (foo) {
    case 1: {
        int i; // local to this case!
        break;
    }
    case 2: {
        int i;
        break;
    }
}

О, а также это: Не спешите утверждать, что вы нашли ошибку

2 голосов
/ 02 декабря 2011

Это правильный синтаксис. Скобки сами по себе просто указывают на отдельный блок области видимости; в этом случае совершенно не связано с if - else if.

Таким образом, в вашем коде всегда будет выполняться последний блок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...