Here's my original code, which I was trying to modify to limit data entry to a single char, converted to uppercase.
public char promptForGuess()
{
Console.Write("\nGuess a letter: ");
return Convert.ToChar(Console.ReadLine().ToUpper());
}
I thought it would be easy:
public char promptForGuess()
{
Console.Write("\nGuess a letter: ");
return Convert.ToChar(Console.ReadKey().ToUpper());
}
but I get this error:
'System.ConsoleKeyInfo' does not contain a definition for 'ToUpper' and no extension method 'ToUpper' accepting a first argument of type 'System.ConsoleKeyInfo' could be found (are you missing a using directive or an assembly reference?)
which doesn't really mean a lot to me...and google wasn't terribly helpful either. I tried this,
public char promptForGuess()
{
Console.Write("\nGuess a letter: ");
return = Console.ReadKey();
}
and got a message the I can't implicitly convert ReadKey() to char.
public String promptForGuess()
{
Console.Write("\nGuess a letter: ");
return Console.ReadKey();
}
tells me that I can't implicitly convert Console.ReadKey() to String
So if it's not char and not String, what type is Console.ReadKey(). And how can I return a char with ToUpper()?
Console.ReadKey() returns a ConsoleKeyInfo. In the future you can answer these questions yourself by reading the documentation. The page for ConsoleKeyInfo has a complete example of how to use it. The key bit is: