Как запрашивать ввод числа до тех пор, пока оно не будет введено корректно? C#
Ребята, подскажите как решить данную проблему кода. При вводе в переменную цифры, код исправно работает, но если вести букву "р", нажать пробел и так далее, Консоль выводит: "Входная строка имела неверный формат". Такой вопрос, как сделать так, чтобы при вводе буквы или чего-то другого помимо цифры, код переходил к else и снова прогонял его.
Console.WriteLine("Выберите ваш пол: " + "\n 1 -> М." + "\n 2 -> Ж.");
Console.Write("Ваш выбор: ");
int sex = Convert.ToInt32(Console.ReadLine());
bool case2Continue = true;
while (case2Continue == true)
{
if (sex == 1 || sex == 2)
case2Continue = false;
else
{
case2Continue = true;
Console.Write("Неправильный выбор, повторите: ");
sex = Convert.ToInt32(Console.ReadLine());
}
}
Ответы (1 шт):
Автор решения: iiKuzmychov
→ Ссылка
Типичный код для ввода до успеха выглядит так:
Console.Write("Введите X: ");
while (!(int.TryParse(Console.ReadLine(), out var x) && ...))
{
Console.WriteLine("Введено неверное значение! Повторите ввод: ");
}
Можно вынести этот код в отдельных вспомогательный класс и немного обобщить:
internal static ConsoleHelper
{
public static T Read<T>(string prompt, Predicate<T>? predicate = null)
where T : IParsable // .NET 7+
{
predicate ??= x => true;
Console.Write(prompt);
while (!(T.TryParse(Console.ReadLine(), out var result) && predicate(x)))
{
Console.WriteLine("Введено неверное значение! Повторите ввод: ");
}
return result;
}
}
и использовать так:
var number = ConsoleHelper.Read<int>("Введите число в диапазоне 1 до 10: ", x => x is >= 1 and <= 10);