Разъяснение по циклу while (true) со встроенным If-Else

#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. Это был пример, как сказал оп.