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

测试下述C#代码时为何出现“Value cannot be null”错误?

问题分析与修复方案

错误原因

  1. 固定长度数组产生空元素:代码用了长度为10的数组,若用户提前输入"x"中断输入,数组未被赋值的位置会保留默认null值,第二个循环遍历到这些null时,调用Int32.Parse(null)就会触发ArgumentNullException
  2. 大小写匹配限制:代码只判断小写"x",用户输入大写"X"不会触发中断,会继续填充数组
  3. 未处理无效输入:若用户输入非整数、非"X"的内容,Int32.Parse也会抛出异常

修复后的代码

List<string> inputNumbers = new List<string>();
bool foundEven = false;

while (true)
{
    string input = Console.ReadLine();
    // 忽略大小写判断退出指令
    if (input.Equals("x", StringComparison.OrdinalIgnoreCase))
    {
        break;
    }
    inputNumbers.Add(input);
}

foreach (string numStr in inputNumbers)
{
    // 安全解析整数,避免无效输入异常
    if (int.TryParse(numStr, out int number))
    {
        if (number % 2 == 0)
        {
            foundEven = true;
            Console.WriteLine(numStr);
        }
    }
}

if (!foundEven)
{
    Console.WriteLine("N/A");
}
Console.ReadLine();

修复要点

  • 用List<string>替代固定数组,仅存储用户实际输入内容,彻底避免空元素问题
  • 用StringComparison.OrdinalIgnoreCase实现大小写无关判断,支持输入"X"或"x"退出
  • 用int.TryParse替代Int32.Parse,既避免解析失败的异常,又能安全获取整数值
  • 遍历实际输入的集合,无需处理数组中未赋值的无效位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:36:34