C# Преобразование ReadKey() в int

Я новичок в C#, и мне сказали создать текстовый симулятор битвы с Pokemon, поэтому в приведенном ниже коде у меня есть метод, позволяющий получить пользовательский ввод и решить, какую природу получить Pokemon:

public static void NatureSelection(out int statIndex1, out int statIndex2)
    {
        Console.WriteLine("If you wish to have a neutral nature, Enter 0 in the next line, If not, enter any key to continue");
        char holder = Convert.ToChar(Console.ReadKey());
        statIndex1 = Convert.ToInt16(holder);
        if (statIndex1 == 0) 
        {
            statIndex2 = 0;
        }

        Console.WriteLine("Please Select A Nature For Your Pokemon By Entering The Number Beside The Stats That You Want To Increase ");
        statIndex1 = Convert.ToInt16(Console.ReadKey());
        while (!(statIndex1 > 0 && statIndex1 <=5))
        {
            statIndex1 = Convert.ToInt32(Console.ReadKey());
            Console.WriteLine("Invalid Value,Please Try Again");
        }


        Console.WriteLine("Now Enter The Number Beside The Stats That You Want To Decrease ");
        statIndex2 = Convert.ToInt32(Console.ReadKey());
        while (!(statIndex2 > 0 && statIndex2 <= 5))
        {
            statIndex2 = Convert.ToInt16(Console.ReadKey());
            Console.WriteLine("Invalid Value,Please Try Again");
        }

    }

Однако, когда я пытаюсь преобразовать ключ чтения в int, выдается сообщение об ошибке:

эта строка выдает ошибку:

char holder = Convert.ToChar(Console.ReadKey());

Необработанное исключение типа "System.InvalidCastException" произошло в mscorlib.dll

Дополнительная информация: Невозможно привести объект типа "System.ConsoleKeyInfo" к типу "System.IConvertible".

Может кто-нибудь объяснить, что это значит и как я могу это исправить?

1 ответ

Решение

Определенно эта линия Convert.ToInt16(Console.ReadKey()) вызвать исключение, из-за сбоя преобразования, я предлагаю вам использовать так:

  int myNumber = (int)(Console.ReadKey().KeyChar);

поскольку Console.ReadKey() возвращает ConsoleKeyInfo Чтобы .KeyChar даст вам соответствующее значение символа, которое может быть легко преобразовано в целое число с помощью неявного преобразования. Но это также даст значения ascii для персонажей.

Другой вариант для вас TryParse, так что вы можете также определить результат преобразования. код будет таким:

int myNumber;
if (!int.TryParse(Console.ReadKey().ToString(), out myNumber))
{
    Console.WriteLine("Conversion faild");
}
// myNumber holds the result
Другие вопросы по тегам