Как поймать ввод, который не соответствует моим параметрам перечисления - PullRequest
0 голосов
/ 02 мая 2018

У меня есть здесь способ ввода в день недели, но если я ввожу числовое значение, отличное от 1-7, программа просто завершится. Я хочу иметь способ вызвать улов.

        namespace DaysOfTheWeek
{
class Program
{
    public enum EDay
    {
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday,
    }
    static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("Hello!  A week has 7 days!  What day of this week is it?");
            EDay pickDay = (EDay)Enum.Parse(typeof(EDay), Console.ReadLine(), true);
            Console.WriteLine("The day you picked was {0}", pickDay - 1);
            Console.ReadLine();
        }
        catch (Exception)
        {
          Console.WriteLine("Please enter an actual numerical day of the week.");
            Console.ReadLine();
        }
    }

}

}

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вы должны использовать int.Parse, если ожидается, что ввод будет "числовым". И, int.TryParse поможет вам поймать числовой ввод:

var input = Console.ReadLine();
if (int.TryParse(input, out var value))
{
    if (1 <= value && value <= 7)
    {
        Console.WriteLine("The day you picked was {0}", (EDay)value - 1);
    }
    else
    {
        Console.WriteLine("PLease enter an number between 1 - 7");
    }
}
else
{
    Console.WriteLine("Please enter an actual numerical day of the week.");
}

Вы также можете использовать Enum.TryParse, если вы также хотите принять ввод как "понедельник" с добавлением числового значения. Просто убедитесь, что изменили эту строку, если хотите, чтобы 1 отображался на Monday:

Monday = 1,

Вы также можете использовать (EDay)value напрямую, если вы внесли указанное выше изменение для решения int.TryParse.

0 голосов
/ 02 мая 2018

Вы, вероятно, захотите сначала прочитать, что они вводят, прежде чем конвертировать их в ваше перечисление.

Вот простой пример:

try
{
    Console.WriteLine("Hello!  A week has 7 days!  What day of this week is it?");
    var dayEntered = Console.ReadLine();
    int dayInt;
    bool success = int.TryParse(dayEntered, dayInt);
    if(!success || dayInt < (int)EDay.Monday || dayInt > (int)EDay.Sunday)
    {
        //either throw a new exception to go into your catch block or just have logic here.
    }
    EDay pickDay = (EDay)dayInt;
    Console.WriteLine("The day you picked was {0}", pickDay - 1);
    Console.ReadLine();
}
catch (Exception)
{
    Console.WriteLine("Please enter an actual numerical day of the week.");
    Console.ReadLine();
}
0 голосов
/ 02 мая 2018

Вы можете использовать IsDefined() как

if(Enum.IsDefined(typeof(EDay), Convert.ToInt32(Console.ReadLine())))
...