Недавно в книге я прочитал этот код. Можете ли вы определить средства этого кода и как работает этот код.Как этот цикл работает в C#
int i = 0;
for (; i != 10;)
{
Console.WriteLine(i);
i++;
}
Недавно в книге я прочитал этот код. Можете ли вы определить средства этого кода и как работает этот код.Как этот цикл работает в C#
int i = 0;
for (; i != 10;)
{
Console.WriteLine(i);
i++;
}
Это петли.
Поскольку вы уже установили i=0
выше, они пропустили этот раздел цикла for
. Кроме того, поскольку вы увеличиваете переменную в конце, они также опустили ее.
Они в основном просто превратили цикл for в цикл while.
Это, вероятно, будет более элегантно, как:
int i = 0;
while(i != 10)
{
Console.WriteLine(i);
i++;
}
, а также инициализировать i за пределами цикла, чтобы дать ему больший объем, он также позволяет делать инкрементатор при условии внутри цикла, например. i + = 2 или i - или что-то, без необходимости компенсировать все, что было указано в третьей части цикла for. Но да, то же самое, как я думаю, – Jacob
@Jacob, +1 для захвата области, я даже не думал об этом. –
Если это легче увидеть в нормальной форме, это почти эквивалент этого:
for (int i = 0; i != 10; i++)
{
Console.WriteLine(i);
}
За исключением, что он оставляет i
, доступный пользователю после завершения цикла, не ограничивается только циклом for
.
Это то же самое, как этот цикл:
for (int i = 0; i != 10; i++) {
Console.WriteLine(i);
}
Кроме этого, переменная i
объявлена вне цикла, так что сфера больше.
В цикле for
первым параметром является инициализация, второе - это условие, а третье - это приращение (которое фактически может быть примерно чем угодно). В книге показано, как инициализация и приращение перемещаются в место в коде, где они фактически выполняются. Цикл может быть также показано, как эквивалентное while
петли:
int i = 0;
while (i != 10) {
Console.WriteLine(i);
i++;
}
Здесь переменная i
также объявлена вне цикла, поэтому объем больше.
Вы используете «за», как «а»
Этот код можно переписать, (в контексте фрагмент кода - это не равнозначно, как указано.), Как:
for (int i = 0; i != 10; i++)
Console.WriteLine(i);
В принципе, выражение инициализации и выражение инкремента были взяты из выражения цикла for, которые являются чисто необязательными.
Я хотел бы отметить, что то, что вы разместили, не равно * эквивалентно *, есть разница в размере. –
Спасибо @Nick, отредактированный согласно вашему предложению. –
Это так же, как:
for (int i = 0; i != 10; i++) {
Console.WriteLine(i);
}
Пожалуйста, не писать код, как это. Это просто уродство и поражает цель for-loops.
для постановки определяется в # Spec C, как
для (для-инициализатора; для-состояния; для-итератора) погруженного заявление
Все три из для инициализатора, для условий, a d для итератора являются необязательными. Код работает, потому что эти части не требуются.
Для любопытных: если для-состояния опущен, то цикл ведет себя, как если бы был для-состояния, который привел верно. Таким образом, он будет действовать как бесконечный цикл, требующий переход заявление оставить (перерыва, Гото, бросок или возвращения).
Как int i
был объявлен сверху, поэтому он не был в цикле for. это совсем как
for(int i = 0; i!=10; i++)
{
/// do your code
}
Интересно, не видел, что раньше ... – Yoda
@Yoda - Наверное, потому, что его плохой форме. Юридическая, но плохая форма. –
Удивленный, у вас нет никаких проблем с этим вопросом. +1 для возврата к основам. –