Если вы придерживаетесь Convert, то вам, вероятно, стоит использовать try catch. Возможно, настройте ваши методы ReadXxx так, чтобы они не возвращались, если ввод не действителен:
private static DateTime ReadDate(string prompt)
{
while(true){
Console.WriteLine(prompt + ": > ");
try{
return Convert.ToDateTime(Console.ReadLine());
} catch(Exception) {
Console.WriteLine("Couldn't understand that as a date, try again ");
}
}
}
Единственный способ для пользователя избежать этого l oop - ввести действительную дату
Если вы не хотите использовать try
, вы можете посмотреть на TryParse
в int, DateTime et c - он возвращает false, если не удалось выполнить синтаксический анализ, который можно использовать в элементе управления oop для продолжайте l oop, пока разбор не работает, например:
Console.WriteLine(prompt + ": > ");
int x;
while(!int.TryParse(Console.ReadLine(), out x))
Console.WriteLine("Bad int, try again> ");
return x;