未分配的变量和 "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 一旦您输入正确的猜测 - 并一直循环直到那时。你根本不需要 guessInputSuccessguess 可以有一个更小的范围:

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;