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

如何在C#中组织TRY CATCH,使控制台显示具体错误类型?

解决输入非整数时反馈具体错误类型的问题

你的原代码因为捕获了所有Exception类型,没法区分具体错误原因,所以没法给出针对性的错误提示。下面提供两种改进方案:

方案一:捕获具体异常类型(改进try-catch写法)

替换goto为更易读的do-while循环,同时捕获特定异常类型,分别给出提示:

int yas;
bool isInputValid;
do
{
    Console.Write("请输入你的年龄:");
    isInputValid = true;
    try
    {
        yas = int.Parse(Console.ReadLine());
        Console.WriteLine("谢谢,我会记住的!");
    }
    catch (FormatException)
    {
        Console.WriteLine("错误:你输入的不是有效的整数(比如字母、符号这类非数字内容),请重新输入!");
        isInputValid = false;
    }
    catch (OverflowException)
    {
        Console.WriteLine("错误:你输入的数字超出了整数范围(-2147483648 到 2147483647),请重新输入!");
        isInputValid = false;
    }
} while (!isInputValid);

方案二:使用int.TryParse(更高效,避免异常开销)

异常处理存在一定性能开销,用TryParse先判断输入有效性,再进一步区分错误类型:

int yas;
bool isInputValid;
do
{
    Console.Write("请输入你的年龄:");
    string input = Console.ReadLine();
    isInputValid = int.TryParse(input, out yas);
    
    if (!isInputValid)
    {
        if (string.IsNullOrWhiteSpace(input))
        {
            Console.WriteLine("错误:你没有输入任何内容,请重新输入!");
        }
        else
        {
            try
            {
                long temp = long.Parse(input);
                if (temp < int.MinValue || temp > int.MaxValue)
                {
                    Console.WriteLine("错误:你输入的数字超出了整数范围(-2147483648 到 2147483647),请重新输入!");
                }
                else
                {
                    Console.WriteLine("错误:你输入的不是有效的整数,请重新输入!");
                }
            }
            catch (FormatException)
            {
                Console.WriteLine("错误:你输入的不是有效的整数,请重新输入!");
            }
        }
    }
    else
    {
        Console.WriteLine("谢谢,我会记住的!");
    }
} while (!isInputValid);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:23