C # Console.Readkey - ждать конкретного ввода - PullRequest
9 голосов
/ 28 октября 2011

У меня есть небольшое консольное приложение на C #, которое я пишу.

Я бы хотел, чтобы приложение ожидало инструкции от пользователя относительно нажатия клавиш Y или N (если нажата любая другая клавиша, приложение игнорирует это и ожидает либо Y, либо N, а затем запускает код, зависящий от Да или нет.

Я пришел с этой идеей,

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

К сожалению, VS говорит, что результат ему не нравится. Ключ ==, поскольку операнд не может быть применен к 'char' или 'string'

Любая помощь, пожалуйста?

Заранее спасибо.

Ответы [ 4 ]

14 голосов
/ 28 октября 2011

KeyChar - это char, в то время как "Y" - это string.

. Вместо этого вам нужно что-то вроде KeyChar == 'Y'.

4 голосов
/ 28 октября 2011

Отметьте это вместо

string result = Console.ReadLine();

А после проверки результата

2 голосов
/ 03 декабря 2013

То, что вы ищете, это что-то вроде

       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();
        }
    }
0 голосов
/ 20 апреля 2016

Вы, вероятно, хотите, чтобы пользователь подтвердил свой ответ, нажав Enter, поэтому ReadLine лучше всего. Также преобразуйте строковый ответ в верхний регистр для проверки общего сравнения. Вот так:

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