如何设置try-catch以确保用户输入枚举列表中包含的值?

时间:2018-10-10 03:19:10

标签: c# enums

我有一个星期几的枚举列表,还有一个程序要求用户输入当前日期(可以是列表中的任何一天)。我需要实施一次尝试捕获以确保用户输入有效的日期,但是我遇到了一些混乱。

当我搜索如何对枚举进行异常处理时,大多数站点建议在try-catch上使用TryParse,但是对于此特定任务,我需要将其包装在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 :(得分:2)

您可以使用EnumTryParse Method。您实际上也可以删除try-catch。

gdbgui

OR

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
    }
}

编辑:

进一步检查后,@ Nalaka526的答案更合适。对于意外的输入(例如“ 01”,“ 111”等),Enum.TryParse将返回true,而Enum.IsDefined将仅与枚举名称匹配。

这是您继续提示当天直到输入有效的一种方法。

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();
}

答案 1 :(得分:1)

您还可以使用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();