Warm tip: This article is reproduced from serverfault.com, please click
c#

c#-在 int 方法中带有布尔变量的 while 循环

(c# - while loop with a boolean variable in an int method)

发布于 2021-10-20 20:54:32

我写了两个方法,并在方法中添加了一个无限while循环。

  • 第一种方法
    public static int GetNumber()
        {
            bool isCountinue = true;
            while (isCountinue)
            {
                Console.Write("Please enter an integer number: ");
                string value = Console.ReadLine();
                bool isInteger = int.TryParse(value, out int number);
                if (isInteger)
                {
                    return number;
                }
                else
                {
                    Console.WriteLine("Your input is not an integer number!");
                    isCountinue = false;
                }
            }
        }
  • 第二种方法
public static int GetNumber()
    {
        while (true)
        {
            Console.Write("Please enter an integer number: ");
            string value = Console.ReadLine();
            bool isInteger = int.TryParse(value, out int number);
            if (isInteger)
            {
                return number;
            }
            else
            {
                Console.WriteLine("Your input is not an integer number!");
                continue;
            }
        }
    }

我得到了第一种方法的错误。因为它缺少第一种方法中的返回值。我很困惑为什么第二种方法是正确的,而第一种方法是错误的?

Questioner
oni
Viewed
0
ADyson 2021-10-21 04:59:53

你的两种方法做了两件略有不同的事情,这导致了问题:

版本 1:

isCountinue设置为false时,while循环将停止运行。然后控制将传递到循环之后的下一行,这}表示方法的结束。

return循环结束后没有语句。这使得该方法无效,因为它需要返回一个int,但在这种情况下它没有任何东西可以返回。

版本 2:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/continue

continue 语句将控制权传递给它出现的封闭迭代语句的下一次迭代

这意味着当continue被执行时,while循环将再次运行。

因此,唯一可能的退出循环——更重要的是,整个方法,是通过return number;线路。

这就是该方法的第二个版本可以编译但第一个版本不能编译的原因。在非 void 方法中,你必须确保不存在不涉及return语句的方法末尾的路径。