2010-05-14 2 views
7

Недавно в книге я прочитал этот код. Можете ли вы определить средства этого кода и как работает этот код.Как этот цикл работает в C#

int i = 0; 
for (; i != 10;) 
{ 
    Console.WriteLine(i); 
    i++; 
} 
+0

Интересно, не видел, что раньше ... – Yoda

+0

@Yoda - Наверное, потому, что его плохой форме. Юридическая, но плохая форма. –

+0

Удивленный, у вас нет никаких проблем с этим вопросом. +1 для возврата к основам. –

ответ

13

Это петли.

Поскольку вы уже установили i=0 выше, они пропустили этот раздел цикла for. Кроме того, поскольку вы увеличиваете переменную в конце, они также опустили ее.

Они в основном просто превратили цикл for в цикл while.

Это, вероятно, будет более элегантно, как:

int i = 0; 
while(i != 10) 
{ 
    Console.WriteLine(i); 
    i++; 
} 
+2

, а также инициализировать i за пределами цикла, чтобы дать ему больший объем, он также позволяет делать инкрементатор при условии внутри цикла, например. i + = 2 или i - или что-то, без необходимости компенсировать все, что было указано в третьей части цикла for. Но да, то же самое, как я думаю, – Jacob

+0

@Jacob, +1 для захвата области, я даже не думал об этом. –

1

Если это легче увидеть в нормальной форме, это почти эквивалент этого:

for (int i = 0; i != 10; i++) 
{ 
    Console.WriteLine(i); 
} 

За исключением, что он оставляет i, доступный пользователю после завершения цикла, не ограничивается только циклом for.

1

Это то же самое, как этот цикл:

for (int i = 0; i != 10; i++) { 
    Console.WriteLine(i); 
} 

Кроме этого, переменная i объявлена ​​вне цикла, так что сфера больше.

В цикле for первым параметром является инициализация, второе - это условие, а третье - это приращение (которое фактически может быть примерно чем угодно). В книге показано, как инициализация и приращение перемещаются в место в коде, где они фактически выполняются. Цикл может быть также показано, как эквивалентное while петли:

int i = 0; 
while (i != 10) { 
    Console.WriteLine(i); 
    i++; 
} 

Здесь переменная i также объявлена ​​вне цикла, поэтому объем больше.

1

Вы используете «за», как «а»

1

Этот код можно переписать, (в контексте фрагмент кода - это не равнозначно, как указано.), Как:

for (int i = 0; i != 10; i++) 
    Console.WriteLine(i); 

В принципе, выражение инициализации и выражение инкремента были взяты из выражения цикла for, которые являются чисто необязательными.

+0

Я хотел бы отметить, что то, что вы разместили, не равно * эквивалентно *, есть разница в размере. –

+0

Спасибо @Nick, отредактированный согласно вашему предложению. –

0

Это так же, как:

for (int i = 0; i != 10; i++) { 
    Console.WriteLine(i); 
} 

Пожалуйста, не писать код, как это. Это просто уродство и поражает цель for-loops.

2

для постановки определяется в # Spec C, как

для (для-инициализатора; для-состояния; для-итератора) погруженного заявление

Все три из для инициализатора, для условий, a d для итератора являются необязательными. Код работает, потому что эти части не требуются.

Для любопытных: если для-состояния опущен, то цикл ведет себя, как если бы был для-состояния, который привел верно. Таким образом, он будет действовать как бесконечный цикл, требующий переход заявление оставить (перерыва, Гото, бросок или возвращения).

0

Как int i был объявлен сверху, поэтому он не был в цикле for. это совсем как

for(int i = 0; i!=10; i++) 
{ 
    /// do your code 
} 
Смежные вопросы