Поддерживает ли C # кодовые блоки без скобок? - PullRequest
14 голосов
/ 03 декабря 2010

Как бы C # скомпилировал это?

if (info == 8)
    info = 4;
otherStuff();

Будет ли включать следующие строки в кодовый блок?

if (info == 8)
{
    info = 4;
    otherStuff();
}

Или это займет только следующую строку?

if (info == 8)
{
    info = 4;
}
otherStuff();

Ответы [ 7 ]

39 голосов
/ 03 декабря 2010

Да, он поддерживает это - но он принимает следующий оператор , а не следующую строку . Так, например:

int a = 0;
int b = 0;
if (someCondition) a = 1; b = 1;
int c = 2;

эквивалентно:

int a = 0;
int b = 0;
if (someCondition)
{
    a = 1;
}
b = 1;
int c = 2;

Лично я всегда ставлю фигурные скобки вокруг тел if операторов, и большинство соглашений о кодировании, с которыми я сталкивался, используют тот же подход.

7 голосов
/ 03 декабря 2010
if (info == 8)
{
    info = 4;
}
otherStuff();
4 голосов
/ 03 декабря 2010

Работает как C / C ++ и Java. Без фигурных скобок он включает только следующее утверждение.

1 голос
/ 03 декабря 2010

В C #, если операторы запускают команды в скобках.Если квадратные скобки не указаны, выполняется следующая команда, если утверждение истинно, а затем выполняется команда после.если условие ложно, просто продолжает следующую команду

, поэтому

if( true )
    method1();
method2();

будет таким же, как

if( true )
{
    method1();
}
method2();
1 голос
/ 03 декабря 2010

Да, он поддерживает, если кодовые блоки без скобок, только первый оператор после if будет включен в блок if, как во втором примере

0 голосов
/ 03 декабря 2010

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

0 голосов
/ 03 декабря 2010

Конечно, «если» работает только для «info = 4».

...