При получении ввода от пользователя в приложении Console
я создаю библиотеку методов, которые принимают строку promp
(для представления пользователю), а затем проверяют результаты в цикле. Это значительно упрощает получение данных от пользователя, который должен быть определенного типа и / или должен иметь определенный диапазон значений, например.
В этом случае нам нужно получить DateTime
от пользователя, и он должен быть в определенном формате. Чтобы справиться с этим, я бы создал следующие методы:
private static DateTime GetDateWithFormatFromUser(string prompt,
List<string> validFormats = null)
{
// If the user doesn't pass any valid formats, then use a generic method to get the value
if (validFormats == null || validFormats.Count == 0) return GetDateFromUser(prompt);
DateTime result;
// Prompt the user in a loop, where the condition is
// that the value they enter is in one of our formats.
do
{
Console.Write(prompt);
} while (!DateTime.TryParseExact(Console.ReadLine(), validFormats.ToArray(),
CultureInfo.InvariantCulture, DateTimeStyles.None, out result));
return result;
}
private static DateTime GetDateFromUser(string prompt)
{
DateTime result;
do
{
Console.Write(prompt);
} while (!DateTime.TryParse(Console.ReadLine(), out result));
return result;
}
Теперь в нашем основном коде мы можем создать список форматов, которые мы примем (возможно, мы допустим однозначные И двухзначные дни и месяцы), а затем передадим его в наш метод проверки выше вместе с подскажите:
static void Main()
{
var validFormats = new List<string>
{
"dd-MM-yyyy", "d-MM-yyyy", "dd-M-yyyy", "d-M-yyyy"
};
DateTime firstDate = GetDateWithFormatFromUser(
"Please enter the first date (dd-MM-yyyy): ", validFormats);
DateTime secondDate = GetDateWithFormatFromUser(
"Please enter the first date (dd-MM-yyyy): ", validFormats);
GetKeyFromUser("Done! Press any key to exit...");
}