Который является корректным бесконечным циклом C#, для (; ;) или в то время как (верный)? [закрытый]

Как странный! IE действительно, однако, понимает его при использовании innerHTML вместо методов DOM.

function escapeHTML(s) {
    return s.split('&').join('&amp;').split('<').join('&lt;').split('"').join('&quot;');
}
function qualifyURL(url) {
    var el= document.createElement('div');
    el.innerHTML= '<a href="'+escapeHTML(url)+'">x</a>';
    return el.firstChild.href;
}

Немного ужасный, но более краткий, чем Выполнение Его Самостоятельно.

94
задан Peter Mortensen 17 April 2017 в 12:56
поделиться

19 ответов

while(true)
{

}

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

121
ответ дан 24 November 2019 в 05:55
поделиться

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

Если и будет какая-то разница в производительности, я уверен, что перевод на MSIL будет оптимизирован. Вы можете проверить это, если действительно захотите.

0
ответ дан 24 November 2019 в 05:55
поделиться

Любое выражение, которое всегда возвращает истину, должно подходить для цикла while.

Пример:

1==1 //Just an example for the text stated before 
true
0
ответ дан 24 November 2019 в 05:55
поделиться

Единственная причина, по которой я бы сказал for (;;) , связана с ограничениями CodeDom (в то время как циклы не могут быть объявлены с помощью CodeDom, а циклы for рассматриваются как более общая форма как итерационный цикл).

Это довольно слабая причина для выбора этого, за исключением того факта, что реализация цикла for может использоваться как для обычного кода, так и для кода, сгенерированного CodeDom. То есть, он может быть более стандартным.

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

1
ответ дан 24 November 2019 в 05:55
поделиться

Даже я также говорю, что нижеследующий лучше :)

while(true)
{

}
2
ответ дан 24 November 2019 в 05:55
поделиться

Я предпочитаю немного больше «грамотный» код. На практике я с гораздо большей вероятностью поступлю так:

bool shouldContinue = true;
while (shouldContinue)
{
    // ...

    shouldContinue = CheckSomething();
}
2
ответ дан 24 November 2019 в 05:55
поделиться

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

Хотя мне нравится это:

for (float f = 16777216f; f < 16777217f; f++) { } 
2
ответ дан 24 November 2019 в 05:55
поделиться

Это должно быть while (true) не while (1) , поэтому while (1) неверно в C # , да;)

4
ответ дан 24 November 2019 в 05:55
поделиться

Оригинальная книга K&R для C, из которой C # может проследить его происхождение, рекомендуется

for (;;) ...

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

Приложение (февраль 2017 г.)

Конечно, если вы думаете, что эта циклическая форма (или любая другая форма) слишком загадочна , вы всегда можете просто добавить комментарий .

// Infinite loop
for (;;)
    ...

Или:

for (;;)    // Loop forever
    ...
6
ответ дан 24 November 2019 в 05:55
поделиться

Лично я предпочитаю для (;;) идиомы (исходя из точки зрения C / C ++). Хотя я согласен с тем, что while (true) в некотором смысле более читабелен (и это то, что я использовал еще когда-то даже в C / C ++), я обратился к использованию для идиома, потому что:

  • это выделяется

Я думаю, что тот факт, что цикл не завершается (обычным образом), заслуживает «вызова», и я думаю, что for (;;) делает это немного больше.

6
ответ дан 24 November 2019 в 05:55
поделиться

Лично я всегда предпочитал вместо (;;) именно потому, что он имеет нет условия (в отличие от while (true) , у которого есть всегда верный). Однако на самом деле это очень незначительный аспект стиля, о котором, как мне кажется, не стоит спорить. Я еще не видел руководства по стилю C #, которое предписывало или запрещало любой подход.

10
ответ дан 24 November 2019 в 05:55
поделиться

В тех ситуациях, когда мне нужен настоящий бесконечный цикл, я всегда использовал

while(true) {...}

Кажется, он лучше выражает намерение, чем пустой оператор for.

10
ответ дан 24 November 2019 в 05:55
поделиться

Если вы хотите следовать старой школе, goto по-прежнему поддерживается в C #:

STARTOVER:  
    //Do something
    goto STARTOVER;

Для действительно бесконечного цикла это команда перехода. =)

26
ответ дан 24 November 2019 в 05:55
поделиться

Перефразируя пару старых шуток:

  1. Не используйте " для (;;) {} " - это заставляет оператор плакать.
  2. Если, конечно, вы не " #define EVER ;; ".
37
ответ дан 24 November 2019 в 05:55
поделиться

Компилятор C # преобразует оба

for(;;)
{
    // ...
}

и

while (true)
{
    // ...
}

в

{
    :label
    // ...
    goto label;
}

CIL для обоих одинаковый. Большинство людей считают, что , а (true) легче читать и понимать. for (;;) довольно загадочен.

Источник:

Я немного испортил .NET Reflector , и я скомпилировал оба цикла с помощью «Оптимизирующего кода» в Visual Studio.

Оба цикла компилируются в (с .NET Reflector):

Label_0000:
    goto Label_0000;

Скоро должны атаковать хищники.

304
ответ дан 24 November 2019 в 05:55
поделиться

Gasp, используйте:

while (!false)
{

}

ИЛИ, как указал jsight , вы можете быть уверены вдвойне:

while (!false && true)
{
}

Перед люди кричат ​​на меня, это все тот же код CIL, я проверил :)

45
ответ дан 24 November 2019 в 05:55
поделиться

Если вы играете в гольф, я бы предложил вместо (;;) . Кроме того, while (true) имеет то же значение и кажется более интуитивным. В любом случае, большинство программистов, вероятно, поймут оба варианта, так что это не имеет особого значения. Используйте то, что вам удобнее.

1
ответ дан 24 November 2019 в 05:55
поделиться

I think while (true) is a bit more readable.

21
ответ дан 24 November 2019 в 05:55
поделиться

I think that this may be easier to read and is definitely the standard for use in C#:

while(true)
{
   //Do My Loop Stuff
}
60
ответ дан 24 November 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: