【问题标题】:Clarification on while (true) loop with embedded If-Else使用嵌入式 If-Else 澄清 while (true) 循环
【发布时间】:2021-10-08 23:40:05
【问题描述】:

我一直在学习使用 C# 进行编程,并且遇到了一个我不熟悉的概念,我正在寻求澄清以帮助我更好地理解正在发生的事情。这并不是 C# 所特有的。它与使用带有嵌入式If-Else 语句的while (true) 循环有关。

我正在研究书中的一个示例,发现作者在方法内部使用了while (true) 循环,该方法由Main 方法调用。在作者的while 循环中是一个If-Else,其中包含方法的返回值。

当我想到使用 while (true) 时,我想到了一个无限循环,您可以调用 break 来摆脱它。然而,这个循环不需要中断就可以退出。相反,如果If 语句的条件为真,则它会中断,如果该条件为假,则循环。下面是一个例子。

当没有可供评估的变量条件时,while 循环是如何中断的,而是硬编码为“真”?它是否与在方法内部有关并且仅因为 Main 调用该方法而中断?只是希望更好地理解这一点,因为它是一种用于验证的便捷技术。

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")
   }
}

【问题讨论】:

  • 循环(和函数)在return 行被命中时结束。
  • 这很令人困惑,因为Console.WriteLine 没有返回值。作者走的是一条(奇怪的)捷径。
  • 感谢@JohnnyMopp,这是有道理的; return 结束循环。代码 sn-p 不是书中的示例。本书示例实际上确实返回了一个值,而不是 void。我只是快速写了一些可能没有意义的东西。大声笑
  • 虽然尽量减少在 Stack Overflow 上使用的示例是件好事,但请尽量避免编写无效代码,然后询问其工作原理。
  • 有多种方法可以打破这样的无限循环。代码可以通过throw new SomethingException(...); 显式抛出异常,或者作为执行有问题的部分的一部分。您可以像在示例中一样使用return,您可以执行break;,它将跳出它所在的循环。

标签: c# while-loop


【解决方案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 循环中断的地方,因为如果返回了值,则没有理由继续循环。

【讨论】:

  • 正如操作人员所说,这是一个例子。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多