C#控制台应用使用可选参数处理用户空输入触发报错求解
问题根因
Convert.ToInt32()遇到空输入、非数字格式输入时会直接抛出异常,你原有代码仅给外层try块做了异常捕获,catch块内的输入转换逻辑没有任何异常防护,连续两次空输入时,第一次异常进入catch块后,第二次空输入触发未捕获异常直接报错。- 可选参数生效的前提是调用方法时主动省略对应参数,你原有try块中只要执行就必然会尝试读取第二个输入、转换后传入方法,第二个输入为空时转换步骤直接抛异常,根本走不到方法调用环节,可选参数自然不会触发。
- 原有逻辑把两次输入的转换放在同一个try块,无法区分是第一个输入出错还是第二个输入出错,异常触发后直接要求重新输入第一个数字,完全不符合第二个输入可选的设计预期。
修复后代码
Program.cs
static void Main(string[] args) { Operator operatorObject = new Operator(); try { Console.WriteLine("Pick a number:"); int data = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Pick another number--optional"); try { // 第二个输入转换成功就传两个参数 int input = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(operatorObject.operate(data, input)); } catch { // 第二个输入为空/格式错误,走可选参数逻辑 Console.WriteLine(operatorObject.operate(data)); } } catch { // 第一个输入为空/格式错误的兜底提示,可按你的需求调整逻辑 Console.WriteLine("第一个输入为必填项,请输入有效数字"); } Console.ReadLine(); }
Operator类(原有定义无需修改,可选参数配置正确)
public class Operator { public int operate(int data, int input = 0) { return data + input; } }
内容的提问来源于stack exchange,提问作者Pmarino
相关产品推荐
相关产品推荐

