未分配的变量和 "Not all code paths return a value" 解决方法?
Unassigned variable and "Not all code paths return a value" workaround?
private static char GetGuess()
{
char guess;
bool guessInputSuccess = false;
while (!guessInputSuccess)
{
Console.Write("Guess your letter: ");
char.TryParse(Console.ReadLine().ToLower(), out guess);
if (!char.IsLetter(guess))
{
Console.Write("You have not entered a letter from a-z.");
}
else
{
guessInputSuccess = true;
}
}
return guess;
}
目前看来,我无法 return guess
因为它未分配。我通常解决这个问题的方法是将 guess
分配给一个随机字符。由于 while
循环将继续,直到输入 a-z 中的有效字符,因此可以确信,到 return 秒时,a-z 中的一个字符将被分配给 guess
。我个人不喜欢这种解决方法,因为对我来说,它感觉很草率。
我的问题是:有什么方法可以让 guess 在方法开始时保持初始化但未分配,并且在方法执行结束时仍然设置并正确 returned?
只需 return 一旦您输入正确的猜测 - 并一直循环直到那时。你根本不需要 guessInputSuccess
,guess
可以有一个更小的范围:
private static char GetGuess()
{
while (true)
{
Console.Write("Guess your letter: ");
if (char.TryParse(Console.ReadLine().ToLower(), out char guess) &&
char.IsLetter(guess))
{
return guess;
}
Console.Write("You have not entered a letter from a-z.");
}
}
如果我没猜错的话。您可以分配一个 empty
字符代码,即 '[=11=]'
.
即guess='[=12=]'
如果使用 do...while
循环,编译器可以看到 guess
总是被赋值:
char guess;
bool guessInputSuccess = false;
do
{
Console.Write("Guess your letter: ");
char.TryParse(Console.ReadLine().ToLower(), out guess);
if (!char.IsLetter(guess))
{
Console.Write("You have not entered a letter from a-z.");
}
else
{
guessInputSuccess = true;
}
} while (!guessInputSuccess);
return guess;
或者,给 guess
一个初始值。 你知道它总是会被赋值,所以值是什么并不重要:
char guess = '[=11=]';
bool guessInputSuccess = false;
while (!guessInputSuccess)
{
Console.Write("Guess your letter: ");
char.TryParse(Console.ReadLine().ToLower(), out guess);
if (!char.IsLetter(guess))
{
Console.Write("You have not entered a letter from a-z.");
}
else
{
guessInputSuccess = true;
}
}
return guess;
private static char GetGuess()
{
char guess;
bool guessInputSuccess = false;
while (!guessInputSuccess)
{
Console.Write("Guess your letter: ");
char.TryParse(Console.ReadLine().ToLower(), out guess);
if (!char.IsLetter(guess))
{
Console.Write("You have not entered a letter from a-z.");
}
else
{
guessInputSuccess = true;
}
}
return guess;
}
目前看来,我无法 return guess
因为它未分配。我通常解决这个问题的方法是将 guess
分配给一个随机字符。由于 while
循环将继续,直到输入 a-z 中的有效字符,因此可以确信,到 return 秒时,a-z 中的一个字符将被分配给 guess
。我个人不喜欢这种解决方法,因为对我来说,它感觉很草率。
我的问题是:有什么方法可以让 guess 在方法开始时保持初始化但未分配,并且在方法执行结束时仍然设置并正确 returned?
只需 return 一旦您输入正确的猜测 - 并一直循环直到那时。你根本不需要 guessInputSuccess
,guess
可以有一个更小的范围:
private static char GetGuess()
{
while (true)
{
Console.Write("Guess your letter: ");
if (char.TryParse(Console.ReadLine().ToLower(), out char guess) &&
char.IsLetter(guess))
{
return guess;
}
Console.Write("You have not entered a letter from a-z.");
}
}
如果我没猜错的话。您可以分配一个 empty
字符代码,即 '[=11=]'
.
即guess='[=12=]'
如果使用 do...while
循环,编译器可以看到 guess
总是被赋值:
char guess;
bool guessInputSuccess = false;
do
{
Console.Write("Guess your letter: ");
char.TryParse(Console.ReadLine().ToLower(), out guess);
if (!char.IsLetter(guess))
{
Console.Write("You have not entered a letter from a-z.");
}
else
{
guessInputSuccess = true;
}
} while (!guessInputSuccess);
return guess;
或者,给 guess
一个初始值。 你知道它总是会被赋值,所以值是什么并不重要:
char guess = '[=11=]';
bool guessInputSuccess = false;
while (!guessInputSuccess)
{
Console.Write("Guess your letter: ");
char.TryParse(Console.ReadLine().ToLower(), out guess);
if (!char.IsLetter(guess))
{
Console.Write("You have not entered a letter from a-z.");
}
else
{
guessInputSuccess = true;
}
}
return guess;