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

C#中二维List添加元素异常:所有子列表同步更新,求原因

问题描述

我编写了如下C#代码实现CountSort方法,期望将元素添加到二维List的指定索引子列表中,但实际运行时,所有子列表都会同步添加元素,而非仅目标子列表。

public static void CountSort(List<List<string>> arr)
{
    for (int i = 0; i < arr.Count / 2; i++)
        arr[i][1] = "-";

    List<List<string>> result = Enumerable.Repeat(new List<string>(), arr.Count).ToList();

    for (int i = 0; i < arr.Count; i++)
    {
        string tempValue = arr[i][1];
        int index = int.Parse(arr[i][0]);
        result[index].Add(tempValue);
    }
}

实际输出示例:

List<List<string>("1"), List<string>("1"),List<string>("1")>

期望输出示例:

List<List<string>(), List<string>("1"), List<string>()>

问题原因

核心问题出在Enumerable.Repeat(new List<string>(), arr.Count)这行代码:

  • Enumerable.Repeat的逻辑是重复返回同一个对象的引用,而非每次生成新的实例。
  • 这就导致result列表里的所有子列表,本质上指向的是同一个List<string>对象。不管你操作哪个索引的子列表,实际都是在修改同一个底层集合,所以所有子列表会同步显示新增元素。

修复方案

将result列表的初始化代码改成用Enumerable.Select生成每个独立的子列表,确保每个索引对应的都是全新的List<string>实例:

// 替换原result初始化代码
List<List<string>> result = Enumerable.Range(0, arr.Count)
                                      .Select(_ => new List<string>())
                                      .ToList();

修改后,每个子列表都是独立对象,往指定索引的子列表添加元素时,其他子列表不会受影响,就能得到预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:36:22