Как настроить try-catch, чтобы убедиться, что пользователь вводит значение, которое содержится в списке enum? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть список перечислений по дням недели и программа, которая просит пользователя ввести текущий день (это может быть любой день в списке).Мне нужно реализовать try-catch, чтобы убедиться, что пользователь входит в правильный день, но у меня возникает путаница.

Когда я ищу, как делать исключения с перечислениями, большинство сайтов предлагают использовать TryParse вместо try-catch, но для этого конкретного задания мне нужно обернуть это в try-catch.Должен ли я использовать catch (OverflowException)?Кажется, это не работает, потому что я не уверен, что будет после этого.Я попытался объявить переменную сразу после OverflowException, как я вижу в примерах try-catch;однако, я вынул это, потому что это дало мне ошибки.До сих пор я не смог найти пример, похожий на мой, который использует try-catch, из которого я могу извлечь уроки.

Может кто-нибудь взглянуть на эту программу и помочь мне с тем, как правильно включитьпопытка поймать для обработки неверного ввода?Я хочу, чтобы консоль говорила «недопустимый день», если пользователь вводит что-либо, кроме воскресенья и субботы, включая сокращения.Спасибо !!

 class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Please enter the current day of the week.");
                string currentday = Console.ReadLine();
                Console.WriteLine("Good job.  Today is " + currentday);
                Console.ReadLine();

            }
           catch(OverflowException)
            {
                Console.WriteLine("Not a valid day");
            }
            Console.ReadLine();
        }

        public enum days
        {
            Sunday,
            Monday,
            Tuesday,
            Wednesday,
            Thursday,
            Friday,
            Saturday          
        }

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы также можете использовать Enum.IsDefined ( без использования Try / Catch ) для проверки правильности введенного значения,

Console.WriteLine("Please enter the current day of the week.");
string currentday = Console.ReadLine();

if (Enum.IsDefined(typeof(days), currentday))
    Console.WriteLine("Good job.  Today is " + currentday);
else
    Console.WriteLine("Not a valid day");

Console.ReadLine();
0 голосов
/ 10 октября 2018

Вы можете использовать Метод EnumTryParse .Вы также можете удалить этот трик-пойнт.

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("Please enter the current day of the week.");
            string currentday = Console.ReadLine();
            days day;

            if (Enum.TryParse<days>(currentday, out day))
            {
                Console.WriteLine("Good job.  Today is " + currentday);
                Console.ReadLine();
            }
            else
            {
                throw new OverflowException(); // try parse failed. enum not valid! Why OverflowException?
            }
        }
        catch (OverflowException)
        {
            Console.WriteLine("Not a valid day");
        }
        Console.ReadLine();
    }

    public enum days
    {
        Sunday,
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday
    }
}

ИЛИ

static void Main(string[] args)
{
    Console.WriteLine("Please enter the current day of the week.");
    string currentday = Console.ReadLine();
    days day;

    if (Enum.TryParse<days>(currentday, out day))
    {
        Console.WriteLine("Good job.  Today is " + currentday);
    }
    else
    {
       Console.WriteLine("Not a valid day");
    }

    Console.ReadLine();
}

РЕДАКТИРОВАТЬ:

При дальнейшей проверке ответ @ Nalaka526 является более подходящим.Enum.TryParse будет возвращать true для неожиданных вводов, таких как «01», «111» и т. Д., В то время как Enum.IsDefined будет соответствовать только именам перечислений.

Вот один из способов продолжения запроса на день доввод действителен.

static void Main(string[] args)
{
    bool isValid = false;

    do {
        Console.WriteLine("Please enter the current day of the week.");
        string currentday = Console.ReadLine();

        isValid = Enum.IsDefined(typeof(days), currentday);

        if (isValid)
        {
            Console.WriteLine("Good job.  Today is " + currentday);
        }
        else
        {
            Console.WriteLine("Not a valid day");
        }
    } while (!isValid);            

    Console.ReadLine();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...