我写了两个方法,并在方法中添加了一个无限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;
}
}
}
我得到了第一种方法的错误。因为它缺少第一种方法中的返回值。我很困惑为什么第二种方法是正确的,而第一种方法是错误的?
你的两种方法做了两件略有不同的事情,这导致了问题:
版本 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
语句的方法末尾的路径。
真诚地感谢您的回答