gpt4 book ai didi

C# 返回错误 “not all code paths return a value” - 如何查找不返回值的路径

转载 作者:行者123 更新时间:2023-12-02 10:40:49 25 4
gpt4 key购买 nike

总的来说,我对编程还很陌生,所以我可能遗漏了一些非常明显的东西。但是,哪条路径会导致不返回值?

public static int CheckAge()
{
int userAge;
bool inValidInput = true;
while (inValidInput)
{
Console.Write("Enter your age: ");
string stringAge = Console.ReadLine();

if (int.TryParse(stringAge, out userAge))
{
switch (userAge)
{
case int n when (n < 1 || n > 120):
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("RANGE ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("error\n");
Console.Write("Accepted range are numbers (eg. 123) ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("between 1 and 120\n");
Console.ForegroundColor = ConsoleColor.White;
break;

default:
return userAge;
}
}
else
{
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("TYPE ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("error\n");
Console.Write("Accepted input types are ");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("numbers (eg. 123) ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("between 1 and 120\n");
continue;
}
}
}

当我看着它时,我觉得所有的路径最终都应该通向:

default:
return userAge;

如果我需要提供完整的源代码,请告诉我,我会添加它,不想让它变得困惑,以防我只需要示例。

编辑:我真的很喜欢@oerkelens 给出的解决方案,但我正在努力让 userAge 变量正常运行。 下方 使用:(return userAge; inside if statement):

public static int CheckAge()
{
int userAge;
bool inputIsValid = false;
while (!inputIsValid)
{
Console.Write("Enter your age: ");
string stringAge = Console.ReadLine();

if (!int.TryParse(stringAge, out userAge))
{
WriteNumericalError();
continue;
}

if (userAge < 1 || userAge > 120)
{
WriteRangeError();
continue;
}

inputIsValid = true;
return userAge;
}
}

给我老话:'Program.CheckAge()':并非所有代码路径都返回一个值

下面 使用:(return userAge; outside if statement):

public static int CheckAge()
{
int userAge;
bool inputIsValid = false;
while (!inputIsValid)
{
Console.Write("Enter your age: ");
string stringAge = Console.ReadLine();

if (!int.TryParse(stringAge, out userAge))
{
WriteNumericalError();
continue;
}

if (userAge < 1 || userAge > 120)
{
WriteRangeError();
continue;
}

inputIsValid = true;
}
return userAge;
}

解决了“Program.CheckAge()”问题:并非所有代码路径都返回一个值,但引入了:使用未分配的局部变量“userAge”

最终解决方案

public static int CheckAge()
{
int userAge = 0;
bool validInput = false;
while (!validInput)
{
Console.Write("Enter your age: ");
string stringAge = Console.ReadLine();

if (!int.TryParse(stringAge, out userAge))
{
WriteNumericalError();
continue;
}

if (userAge < 1 || userAge > 120)
{
WriteRangeError();
continue;
}
validInput = true;
}
return userAge;
}


private static void WriteNumericalError()
{
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("TYPE ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("error\n");
Console.Write("Accepted input types are numbers ");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("(eg. 1 2 3 4 5 6 7 8 9 0)\n");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Press [Enter] to try again");
Console.ReadLine();
}

private static void WriteRangeError()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("RANGE ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("error\n");
Console.Write("Your entered number does not fall within the accepted range ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("1 to 5 for film choice - 1 to 120 for age input\n");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Press [Enter] to try again");
Console.ReadLine();
}

最佳答案

首先,您正在使用一个模糊的无限循环。即使是 while (true),这似乎也是一种代码味道。
其次,你的旗帜具有负面意义。这让人发疯。 inValidInput == false表示输入有效!
第三,很难看出您想用代码完成什么。

下面是一个解决这些问题的例子。还有其他可能的改进,但这只是一个开始。

public static int CheckAge()
{
int userAge = 0;
bool inputIsValid = false;
while (!inputIsValid)
{
Console.Write("Enter your age: ");
string stringAge = Console.ReadLine();

if (!int.TryParse(stringAge, out userAge))
{
WriteNumericalError();
Continue;
}

if (userAge < 1 || userAge > 120)
{
WriteRangeError();
Continue;
}

inputIsValid = true;
}
return userAge;
}

private void WriteNumericalError()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("RANGE ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("error\n");
Console.Write("Accepted range are numbers (eg. 123) ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("between 1 and 120\n");
Console.ForegroundColor = ConsoleColor.White;
}
private void WriteRangeError()
{
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("TYPE ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("error\n");
Console.Write("Accepted input types are ");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("numbers (eg. 123) ");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("between 1 and 120\n");
}

关于C# 返回错误 “not all code paths return a value” - 如何查找不返回值的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63116800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com