#c# #.net #infinite-loop
#c# #.net #бесконечный цикл
Вопрос:
Можете ли вы привести мне пример бесконечного цикла на c # с минимальным количеством кода? Я кое-что придумал, но подумал, что может быть более простой способ.
Комментарии:
1. Что вы пробовали? У меня такое чувство, что к моменту публикации этого комментария будет 10 ответов…
2. Вы имеете в виду, как
while(true){}
?3. Мне любопытно. Что именно вы придумали?
4. @Cody: Я думал об этом,
for(;;){}
но для меня это выглядит неестественно, потому чтоfor(int i;..
само по себе предназначено для зацикливания с явным состоянием текущей позиции. Поэтому, когда позиция не требуется,while(true)
больше подходит.5. @Cody Gray: Я бы рискнул предположить, что
while
конструкцию легче запомнить, потому что это настоящая английская идиома (например, пока я здесь, вы делаете это), тогда как дляfor
нет общей идиомы.
Ответ №1:
Типичными примерами являются циклы for и while. Например
for(;;)
{}
и
while(true)
{}
Однако, в принципе, любая зацикленная конструкция без прерывания или условия завершения будет зацикливаться бесконечно. У разных разработчиков разные мнения о том, какой стиль лучше. Кроме того, контекст может повлиять на то, какой метод вы выберете.
Ответ №2:
while (true);
Этого должно быть достаточно.
Сгенерированный IL является:
IL_0000: br.s IL_0000
Код безоговорочно передает управление самому себе. Отличный способ тратить циклы процессора.
Ответ №3:
Бесконечный цикл:
while (true)
{
// do stuff
}
чтобы разорвать его:
while (true)
{
if (condition)
break;
}
Ответ №4:
Если вам нужно немного больше неясности, возможно, это то, что вам нужно:
for (;;) { }
Или даже
l: goto l;
Ответ №5:
В духе Code Golf:
for(;;);
Ответ №6:
Хотя это и не совсем бесконечный цикл, это будет иметь тот же практический эффект и потреблять намного меньше процессора. 🙂
System.Threading.Thread.Sleep(-1);
Ответ №7:
Попробуйте это, пример бесконечного цикла.
while(true)
{
}
Ответ №8:
Вызовите метод внутри того же метода, и у вас получится бесконечный цикл (Только условия заставляют вас прерывать цикл)
void HelloWorld()
{
HelloWorld();
}
Комментарии:
1. Это не бесконечный цикл, это бесконечная рекурсия, которая в большинстве случаев приведет к исключению StackOverflowException.
2. Ну, вы предположили, что OP хотел пример в литеральных циклах, кстати, рекурсия тоже является циклом (возможно, не в том контексте, который вы представляете сейчас)
3. Если произойдет адаптация, это также будет выполняться бесконечно (но это зависит от компилятора).
4. @V4Vendetta: Рекурсия не является циклической. Хотя иногда возможно эмулировать определенную логику цикла с помощью рекурсии (и наоборот), это не означает, что они эквивалентны. Это не бесконечный цикл.
5. Они могут завершаться, но сами по себе не завершаются. Если предоставить все самому себе на стабильном оборудовании, безусловный пустой цикл действительно будет выполняться вечно. Рекурсивное решение, с другой стороны, устанавливает (и полагается на!) условия, которые в конечном итоге приведут к его собственному сбою, и, следовательно, не может продолжаться вечно, и, следовательно, не может считаться «бесконечным» в любом смысле этого слова.