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

C#如何处理用户输入引发的OverflowException,避免程序崩溃?

问题描述

需要为用户输入设置数值上限(Int32.MaxValue),若输入超出该上限则提示用户重新输入。请问如何在不导致程序崩溃的情况下处理OverflowException?

以下是我目前写的代码:

public bool ValidateValue()
{
        long value = Int32.Parse(UserValue);

        if (value>Int32.MaxValue)
        {
            Console.WriteLine("[ERROR] Too large number! The limit is: {0} \n Please repeat your input. ", Int32.MaxValue);
            return false;
        }
    }
解决方法

你的代码存在核心问题:直接使用Int32.Parse()时,若输入数值超出int类型范围,会立刻抛出OverflowException,根本无法执行后续的范围判断逻辑,导致程序崩溃。

下面提供两种简洁可靠的处理方案:

方案1:通过long.TryParse()兼容更大范围

先将输入转换为范围更广的long类型,再判断是否落在int的合法区间内,同时用TryParse避免解析失败时抛出异常:

public bool ValidateValue()
{
    // 尝试解析输入为long类型,失败则提示非法输入
    if (!long.TryParse(UserValue, out long value))
    {
        Console.WriteLine("[ERROR] 输入无效,请输入合法数字!");
        return false;
    }

    // 判断是否超出int的上下限
    if (value > Int32.MaxValue || value < Int32.MinValue)
    {
        Console.WriteLine($"[ERROR] 数值超出范围!允许的范围是 {Int32.MinValue} 到 {Int32.MaxValue},请重新输入。");
        return false;
    }

    // 输入合法
    return true;
}

方案2:直接用Int32.TryParse()验证

如果不需要处理long范围的数值,可直接用Int32.TryParse()——当输入超出int范围时,该方法会返回false,不会抛出异常:

public bool ValidateValue()
{
    if (!Int32.TryParse(UserValue, out int value))
    {
        Console.WriteLine($"[ERROR] 输入无效!数值必须在 {Int32.MinValue} 到 {Int32.MaxValue} 之间,请重新输入。");
        return false;
    }

    // 输入合法
    return true;
}

额外建议

  • 避免用try-catch捕获OverflowException的方式处理,TryParse系列方法在性能和代码简洁性上更优。
  • 若需要循环让用户重新输入,可在调用ValidateValue()的地方添加循环逻辑:
do
{
    Console.WriteLine("请输入一个数字:");
    UserValue = Console.ReadLine();
} while (!ValidateValue());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:45:13