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

如何避免循环内数据丢失:C#区间拆分后结果数组全为空列表问题

问题根本原因

List<T>是引用类型,你在代码里全程只初始化了一个temporaryList对象,执行finalArray[i] = temporaryList;时,只是把这个对象的内存地址赋值给了数组的对应位置,并没有复制列表里的内容。后续执行temporaryList.Clear()的时候,清空的就是这个所有数组元素共同指向的列表对象,自然之前存入的内容就全部消失了。

修复方案

你可以选择任意一种修改方式:

方案1:每次循环新建独立的临时列表

把临时列表的初始化放到for循环内部,每次循环都生成新的List对象,避免共用同一个对象:

List<double>[] DivideInterval(List<double> myList, int numberOfBlocks, int[] switchingPoint)
{
    List<double>[] finalArray = new List<double>[numberOfBlocks];
    int j = 0;

    for (int i = 0; i < switchingPoint.Length; i++)
    {
        // 每次循环新建临时列表
        var temporaryList = new List<double>();
        for (int k = j; k <= switchingPoint[i]; k++)
            temporaryList.Add(myList[k]);

        finalArray[i] = temporaryList;

        Console.WriteLine("---");
        foreach (var item in finalArray[i])
            Console.WriteLine(item);
        Console.WriteLine("---");
        j = switchingPoint[i] + 1;
    }

    // 后续打印、返回逻辑保持不变即可
    return finalArray;
}

方案2:赋值时复制列表内容

如果要保留临时列表在循环外初始化的写法,赋值的时候可以复制一份新的列表再存入数组:

// 把原来的 finalArray[i] = temporaryList; 替换为下面的代码
finalArray[i] = new List<double>(temporaryList);

这种写法会基于当前临时列表的内容生成一个全新的List对象,后续清空原临时列表不会影响已经存入数组的内容。

内容的提问来源于stack exchange,提问作者Josh.h

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 16:06:03