Как добавить проверку ввода? - PullRequest
0 голосов
/ 08 апреля 2020

Как добавить проверку ввода пользователя в следующий код? не уверен, стоит ли использовать try and catch или есть какой-то другой способ, который был бы великолепен, ура :))

private static int ReadInteger(string prompt)
    {
        Console.Write(prompt + ": > ");
        return Convert.ToInt32(Console.ReadLine());
    }

    private static string ReadString(string prompt)
    {
        Console.WriteLine(prompt + ": > ");
        return Console.ReadLine();
    }

    private static double ReadDouble(string prompt)
    {
        Console.WriteLine(prompt + ": > ");
        return Convert.ToDouble(Console.ReadLine());
    }

    private static DateTime ReadDate(string prompt)
    {
        Console.WriteLine(prompt + ": > ");
        return Convert.ToDateTime(Console.ReadLine());
    }

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Вы можете использовать al oop и TryParse.

private static int ReadInteger(string prompt)
{
    while (true)
    {
        Console.Write(prompt + ": > ");
        var input = Console.ReadLine();
        var ok = int.TryParse(input, out var result);
        if (ok) return result;
        Console.WriteLine("That isn't a valid integer.");
    }
}
0 голосов
/ 08 апреля 2020

Если вы придерживаетесь 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...