web-dev-qa-db-fra.com

C # Console.Readkey - attend une entrée spécifique

J'ai une petite application de console C # que j'écris.

Je voudrais que l'application attende des instructions de l'utilisateur concernant une pression sur la touche Y ou N (si vous appuyez sur une autre touche, l'application ignore cela et attend soit un Y, soit un N, puis le code dépend du Y ou du N réponse.

Je suis venu avec cette idée,

while (true)
{
    ConsoleKeyInfo result = Console.ReadKey();
    if ((result.KeyChar == "Y") || (result.KeyChar == "y"))
    {
         Console.WriteLine("I'll now do stuff.");
         break;
    }
    else if ((result.KeyChar == "N") || (result.KeyChar == "n"))
    {
        Console.WriteLine("I wont do anything");
        break;
    }
}

Malheureusement, VS dit ne pas aimer le résultat. Keychat == car l'opérande ne peut pas être appliqué à un 'caractère' ou une 'chaîne'

Toute aide s'il vous plaît?

Merci d'avance.

9
tripbrock

KeyChar est une char alors que "Y" est une string.

Vous voulez quelque chose comme KeyChar == 'Y' à la place.

14
Gabe

Vérifiez ceci à la place

string result = Console.ReadLine();

Et après vérification du résultat

4
GregM

Qu'est-ce que vous cherchez est quelque chose comme ça

       void PlayAgain()
    {
        Console.WriteLine("Would you like to play again? Y/N: ");
        string result = Console.ReadLine();
        if (result.Equals("y", StringComparison.OrdinalIgnoreCase) || result.Equals("yes", StringComparison.OrdinalIgnoreCase))
        {
            Start();
        }
        else
        {
            Console.WriteLine("Thank you for playing.");
            Console.ReadKey();
        }
    }
2
Corey

Vous voulez probablement que l'utilisateur confirme sa réponse en appuyant sur Entrée; ReadLine est préférable. Convertissez également la réponse de chaîne en majuscules pour le contrôle de comparaison générique. Ainsi:

string result = Console.ReadLine();
if (result.ToUpper().Equals("Y"))
{
    // Do what ya do ...
0
ComeIn