You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获不符合枚举参数的输入?C#枚举输入异常处理

解决输入无效星期数字时的异常处理问题

嘿,我懂你遇到的麻烦了——现在输入1-7以外的数字程序直接终止,核心问题有两个:一是你的代码里没添加对应catch块捕获Enum.Parse抛出的异常,二是默认枚举值从0开始,输入1会对应Tuesday,和你预期的“1=周一”不符。下面是调整后的完整解决方案:

步骤1:修正枚举的数值映射

先给每个星期成员指定对应数字,确保输入1对应Monday,7对应Sunday:

public enum EDay
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
}

步骤2:添加异常捕获逻辑

在try块后添加catch块,捕获Enum.Parse抛出的ArgumentException(输入无法解析为有效枚举值时触发),同时给用户友好提示,甚至可以支持重新输入:

namespace DaysOfTheWeek
{
    class Program
    {
        public enum EDay
        {
            Monday = 1,
            Tuesday = 2,
            Wednesday = 3,
            Thursday = 4,
            Friday = 5,
            Saturday = 6,
            Sunday = 7
        }

        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($"You picked: {pickDay}");
            }
            catch (ArgumentException ex)
            {
                // 处理无效输入场景
                Console.WriteLine("Oops! Please enter a number between 1 and 7 (inclusive) to represent the day of the week.");
                // 可选:让用户重新输入,递归调用Main即可
                // Main(args);
            }
        }
    }
}

额外优化:更高效的输入验证(可选)

如果不想依赖异常处理做验证,也可以先把输入转成整数,判断范围后再转枚举,这样性能更优:

static void Main(string[] args)
{
    Console.WriteLine("Hello! A week has 7 days! What day of this week is it?");
    string input = Console.ReadLine();
    if (int.TryParse(input, out int dayNum))
    {
        if (dayNum >= 1 && dayNum <=7)
        {
            EDay pickDay = (EDay)dayNum;
            Console.WriteLine($"You picked: {pickDay}");
        }
        else
        {
            Console.WriteLine("Please enter a number between 1 and 7!");
        }
    }
    else
    {
        Console.WriteLine("Invalid input! Please enter a valid number.");
    }
}

这样不管输入非数字还是超出范围的数字,程序都能友好处理,不会直接终止啦。

内容的提问来源于stack exchange,提问作者Carter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:11:01