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

C#运行报Unhandled Exception未处理异常的原因排查

报错根因

这个报错不是代码语法编写错误,也不是C#本身不支持多输入处理,问题出在你使用的移动端C#编译器的控制台交互实现有缺陷。

  • 异常触发逻辑:报错显示int.Parse()接收到的入参是null,才抛出ArgumentNullException。正常用户手动输入空行的话,Console.ReadLine()会返回空字符串,int.Parse会抛出格式异常而非空参数异常,只有当Console.ReadLine()直接返回null时才会触发这个错误。
  • Console.ReadLine()返回null的触发条件:按照.NET的运行规则,只有当输入流结束、没有更多可读取的内容时,这个方法才会返回null。标准桌面端控制台运行这段代码时,会在每一次调用ReadLine()时阻塞,等待用户输入完按回车之后再往下执行,不会提前返回null。但大部分轻量移动端C#在线编译器并没有实现完整的交互式控制台能力,很多只支持程序启动前一次性传入全部输入内容,不会在运行过程中阻塞等待用户二次输入,当第一次ReadLine把预传入的内容读完后,第二次调用时输入流已经结束,就直接返回null触发异常。
解决办法
  • 临时适配当前编译器:尝试在程序启动前,就把两个要计算的整数按换行分隔一次性填到输入框里,再启动运行,比如预先输入:
10
25

很多移动端编译器会把预填的内容作为完整输入流传给程序,这种情况下两次ReadLine就能分别读到两个值,不会返回null。

  • 优化代码鲁棒性:增加空值和输入格式校验,避免直接把ReadLine的返回值传入int.Parse,修改后的参考代码:
using System;

namespace HelloWorld
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int a, b, c;
            Console.WriteLine("give a:");
            string aInput = Console.ReadLine();
            // 循环直到拿到合法的a输入
            while (!int.TryParse(aInput, out a))
            {
                if (aInput == null)
                {
                    Console.WriteLine("当前运行环境不支持多轮交互输入,请更换支持标准控制台的C#运行环境");
                    return;
                }
                Console.WriteLine("输入无效,请重新输入整数a:");
                aInput = Console.ReadLine();
            }

            Console.WriteLine("give b:");
            string bInput = Console.ReadLine();
            // 循环直到拿到合法的b输入
            while (!int.TryParse(bInput, out b))
            {
                if (bInput == null)
                {
                    Console.WriteLine("当前运行环境不支持多轮交互输入,请更换支持标准控制台的C#运行环境");
                    return;
                }
                Console.WriteLine("输入无效,请重新输入整数b:");
                bInput = Console.ReadLine();
            }

            c = a + b;
            Console.WriteLine("c={0}", c);
        } 
    }
}
  • 如果预填输入、加了校验之后依然在第二次读取时返回null,说明你当前用的移动端编译器完全不支持多轮控制台交互,换一个实现完整控制台能力的C#运行环境即可,原代码本身的逻辑在标准.NET控制台环境下是可以正常运行的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:18:34