#c# #while-loop
Вопрос:
Я изучал программирование на C# и столкнулся с концепцией, с которой я не был знаком, и я ищу разъяснений, которые помогут мне лучше понять, что происходит. На самом деле это не относится конкретно к C#. Это связано с использованием while (true)
цикла со встроенным If-Else
оператором.
Я работал над примером в книге и обнаружил, что автор использовал while (true)
циклы внутри метода, который был вызван Main
методом. В цикле автора while
был If-Else
параметр, содержащий возвращаемое значение метода.
Когда я думаю об использовании while (true)
, я думаю о бесконечном цикле, в котором вы вызываете break, чтобы выйти из него. Однако эта петля не нуждалась в разрыве, чтобы выйти. Скорее, он прерывается, если условие If
утверждения истинно, и зацикливается, если это условие ложно. Ниже приведен пример.
Как получается, что цикл while прерывается, когда для его оценки нет условия переменной, а оно жестко закодировано»истинно»? Имеет ли это какое-то отношение к нахождению внутри метода и прерывается только потому, что метод вызывается основным? Просто хочу лучше понять это, так как это удобный метод для проверки.
public void ValidateInteger()
{
while(true)
{
if (int.TryParse(Console.ReadLine(), out int value)
return Console.WriteLine($"{value} is an integer")
else
Console.WriteLine($"{value} is not an integer, try again")
}
}
Комментарии:
1. Цикл (и функция) заканчивается при попадании в
return
строку.2. Это сбивает с толку, так
Console.WriteLine
как не возвращает значения. Автор выбирает (странный) короткий путь.3. Спасибо @JohnnyMopp, это имеет смысл; возврат завершает цикл. Фрагмент кода не был примером из книги. Пример книги действительно возвращает значение, а не пустоту. Я просто быстро написал кое-что, что, вероятно, не имеет смысла. лол
4. Хотя хорошо, что вы пытаетесь свести к минимуму примеры для использования при переполнении стека, пожалуйста, постарайтесь не писать недопустимый код, а затем не запрашивать объяснения того, как он работает.
5. Существует несколько способов разорвать бесконечный цикл, подобный этому. Код может выдавать исключение либо явно
throw new SomethingException(...);
, либо как часть выполнения чего-либо , в чем есть проблема. Вы можете использоватьreturn
, как в вашем примере, вы можете выполнитьbreak;
команду, которая вырвется из цикла, в который она помещена.
Ответ №1:
public void ValidateInteger()
{
while(true)
{
if (int.TryParse(Console.ReadLine(), out int value)
return Console.WriteLine($"{value} is an integer") <-- right here
else
Console.WriteLine($"{value} is not an integer, try again")
}
}
Строка возврата-это место, где цикл while прерывается, потому что нет причин продолжать цикл, если было возвращено значение.
Комментарии:
1. Это был пример, как сказал оп.