未分配的变量和“并非所有代码路径都返回值”的解决方法?

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; 
}

目前看来,我无法返回guess,因为它尚未分配。我通常会解决此问题的方法是将guess分配给一个随机字符。由于while循环将一直持续到输入a-z中的有效字符,因此可以确信,到返回时,a-z中的字符将被分配给guess。我个人不喜欢这种解决方法,因为对我来说,这很草率。

我的问题是:有什么办法可以使猜测保持初始化但在方法开始时未分配,并且仍然可以在方法执行结束之前正确设置和返回它?

qq1151873004 回答:未分配的变量和“并非所有代码路径都返回值”的解决方法?

输入正确的猜测后立即返回-一直循环直到此为止。您根本不需要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."); 
    }
}
,

如果您使用guess='\0'循环,则编译器可以看到始终分配了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
,

如果我理解正确的话。您可以分配empty的{​​{1}}字符代码。

'\0'

本文链接:https://www.f2er.com/3049534.html

大家都在问