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

C#中List<T>.Add方法在特定if/else代码块不生效的原因是什么?

问题原因及修复方案

核心问题点

  • 实例重复重置:Infint number1 = new Infint(); Infint number2 = new Infint(); 定义在operation循环内部,每次循环迭代都会生成全新的实例,operation=0阶段存入number1的所有数据,进入operation=1阶段就会被全部清空。
  • 分支逻辑不匹配:你观察到Add不生效的场景基本都在operation=2的打印阶段,该阶段只会进入operation == 2的分支,根本不会执行operation == 0分支内的Add语句,自然看不到添加效果。
  • 读取逻辑存在边界缺陷:每行读取结束后未处理残留的换行符,若输入文件行数不足3行,后续operation循环不会进入while读取逻辑,也不会触发对应添加操作。

修复代码示例

internal class Infint
{
    public bool isNegative { get; set; }
    public List<int> Number { get; set; }
    public Infint()
    {
        isNegative = false;
        Number = new List<int>();
    }
}
static void Main(string[] args)
{
    using (StreamReader sr = new StreamReader("infint.txt"))
    {
        int i;
        char num;
        // 将实例声明移到循环外,避免重复重置
        Infint number1 = new Infint();
        Infint number2 = new Infint();

        for (int operation = 0; operation < 3; operation++)
        {
            number1.Number.Add(1); // 测试添加
            i = sr.Read();
            while (sr.Peek() >= 0)
            {
                number1.Number.Add(1); // 测试添加
                if (i == 10 || i == 13)
                {
                    // 跳过连续换行符
                    while (sr.Peek() == 10 || sr.Peek() == 13) sr.Read();
                    break;
                }

                num = (char)i;

                if (operation == 0)
                {
                    number1.Number.Add(1);
                    if (i == 45)
                        number1.isNegative = true;
                    else
                    {
                        number1.Number.Add((int)Char.GetNumericValue(num));
                    }
                }
                else if (operation == 1)
                {
                    if (i == 45)
                        number2.isNegative = true;
                    else
                    {
                        number2.Number.Add((int)Char.GetNumericValue(num));
                    }
                }
                else if (operation == 2)
                {
                    Console.WriteLine("counts of num1: " + number1.Number.Count);
                    for (var k = 0; k < number1.Number.Count; k++)
                    {
                        Console.Write(number1.Number[k]);
                    }
                    Console.WriteLine("\ncounts of num2: " + number2.Number.Count);
                    for (var k = 0; k < number2.Number.Count; k++)
                    {
                        Console.Write(number2.Number[k]);
                    }
                }

                i = sr.Read();
            }
            if (i == -1)
            {
                break;
            }
        }
    }
    Console.Read();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:24:03