Я использую Console.ReadKey () для выбора из ряда вариантов, которые время от времени меняются.
Перед этим исходным фрагментом кода есть цикл for, который считает вхождения в переменную counter типа int.
Смысл в том, чтобы использовать Console.ReadKey (), чтобы получить int.
int choice = ReadKey();
Console.WriteLine("");
if (choice < counter)
{
mail.to = result[counter-1].email;
}
Используя следующие методы
static int ReadKey()
{
ConsoleKeyInfo choice = Console.ReadKey();
char convertedchoice = choice.KeyChar;
string convertedchoice2 = convertedchoice.ToString();
int result = TryInt(convertedchoice2);
return result;
}
static int TryInt(string totry)
{
while (true)
{
int result;
if (int.TryParse(totry, out result))
{
return result;
}
Console.WriteLine("Sorry, you need to enter a number. Try again.");
}
}
Я пытался использовать ToString (), но это было способом, который позволил мне сделать это в конце.
Так что это выглядит неэффективно для меня, и, следовательно, я был бы очень признателен за то, что делать по-другому?
Edit:
Я закончил с комбинацией всех хороших ответов ниже. Большое спасибо, ребята.
static int ReadKey()
{
while (true)
{
ConsoleKeyInfo choice = Console.ReadKey();
if (char.IsDigit(choice.KeyChar))
{
int answer = Convert.ToInt32(choice.KeyChar);
return answer - 48; //-48 because 0 is represented in unicode by 48 and 1 by 49 etc etc
}
Console.WriteLine("\nSorry, you need to input a number");
}
}