如何捕获不符合枚举参数的输入?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
相关产品推荐
相关产品推荐

