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

如何在C#中使用TryParse处理未处理异常?附代码修正需求

正确使用TryParse实现输入验证与重试逻辑

你的代码问题点

  • 用double.Parse代替TryParse:输入非数字时直接抛出FormatException,无法实现重试逻辑
  • TryParse参数错误:第一个参数必须是用户输入的字符串,你传了已经解析好的double变量num1,完全不符合用法
  • 逻辑顺序错误:应该在获取输入后立刻验证有效性,而不是计算完结果再判断

正确的TryParse用法示例

封装一个通用方法来获取有效数字,这样所有运算逻辑都能复用:

// 封装获取有效double类型输入的方法
static double GetValidDouble(string prompt)
{
    double inputNum;
    bool isInputValid;
    do
    {
        Console.Write(prompt);
        string userInput = Console.ReadLine();
        // TryParse返回bool值,成功则把解析结果存入inputNum
        isInputValid = double.TryParse(userInput, out inputNum);
        if (!isInputValid)
        {
            Console.WriteLine("输入无效,请重新输入数字!");
        }
    } while (!isInputValid); // 输入无效就循环重试
    return inputNum;
}

// 加法逻辑调用示例
if (response.ToLower() == "addition")
{
    double num1 = GetValidDouble("Enter a number: ");
    double num2 = GetValidDouble("Enter another number: ");
    double additionResult = num1 + num2;
    Console.WriteLine("The answer is {0}", additionResult);
    // 如需重试整个加法流程,可在此设置tryAgain = true(根据你的业务逻辑调整)
}

通用异常处理思路

  1. 优先用TryParse系列方法:数值、日期等类型解析优先用TryParse,它不会抛出异常,通过返回值判断结果,性能更好,流程更可控
  2. 针对性捕获异常:如果遇到必须用Parse或其他可能抛异常的操作,捕获具体异常类型,避免捕获通用Exception:
try
{
    int num = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
    Console.WriteLine("输入不是有效的整数格式");
}
catch (OverflowException)
{
    Console.WriteLine("输入的整数超出范围");
}
  1. 避免冗余异常处理:能用TryParse解决的解析问题,就不要用try-catch,减少不必要的异常开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:40:42