C#控制台应用中如何捕获非a/b/c/d输入的错误?
在C#控制台中处理非法输入的两种方式
首先得明确:用户输入数字、w/q/r这类字符本身不会触发系统异常,核心是校验输入合法性;如果业务场景需要用“捕获异常”的方式处理,可以自定义异常来实现。下面是两种常用方案:
方式一:直接校验输入(最常用)
不需要抛出异常,直接判断输入是否在允许范围内,不合法就提示用户重新输入,代码示例:
using System; class Program { static void Main() { char validInput; do { Console.WriteLine("请输入a/b/c/d中的一个:"); // 读取输入并转为小写,兼容大写输入 string input = Console.ReadLine()?.Trim().ToLower(); // 判断输入是否有效:非空、长度为1,且属于允许的字符集合 if (!string.IsNullOrEmpty(input) && input.Length == 1 && "abcd".Contains(input[0])) { validInput = input[0]; break; } else { Console.WriteLine("输入非法!请输入a、b、c、d中的一个。"); } } while (true); Console.WriteLine($"你输入了合法字符:{validInput}"); } }
方式二:自定义异常并捕获
如果业务逻辑需要用异常来标记非法输入的场景,可以自定义异常类,在校验不通过时抛出并捕获处理:
1. 自定义异常类
public class InvalidAnswerException : Exception { public InvalidAnswerException(string message) : base(message) { } }
2. 校验与异常捕获逻辑
using System; class Program { static void Main() { try { Console.WriteLine("请输入a/b/c/d中的一个:"); string input = Console.ReadLine()?.Trim().ToLower(); if (string.IsNullOrEmpty(input) || input.Length != 1 || !"abcd".Contains(input[0])) { throw new InvalidAnswerException("输入的字符不在允许范围内,请输入a、b、c、d中的一个。"); } Console.WriteLine($"你输入了合法字符:{input[0]}"); } catch (InvalidAnswerException ex) { Console.WriteLine($"错误:{ex.Message}"); // 这里可以添加重试逻辑,比如重新执行输入流程 } } }
关键点说明
- 用
ToLower()兼容用户输入大写A/B/C/D的情况,提升交互体验 - 先判断输入是否为空或长度不为1,避免
input[0]触发空引用或索引越界异常 - 批量处理多个问题时,可把校验逻辑封装成单独方法,方便复用
内容的提问来源于stack exchange,提问作者Mr. Skadoosh
相关产品推荐
相关产品推荐

