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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:04