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

C#中如何将List<List<string>>赋值给二维数组D[,]

将嵌套列表转换为二维数组的实现方案

先修正原赋值逻辑的问题

你当前的代码中,循环复用了同一个List<string> B,每次调用B.Clear()后重新添加元素再加入C,这会导致C中所有子列表指向同一个引用,最终所有行的内容都会是最后一次循环的结果。需要改为每次循环新建一个子列表:

List<List<string>> C = new List<List<string>>();
for (int j = 0; j < x; j++)
{
    // 每次循环创建新的子列表,避免引用复用
    List<string> B = new List<string>();
    for (int i = 0; i < y; i++)
        B.Add(i.ToString());           
    C.Add(B);
}

转换为二维数组的步骤

  1. 确定数组尺寸

    • 行数对应C的元素个数:int rows = C.Count;
    • 列数对应子列表的元素个数(取第一个子列表的长度,需确保所有子列表长度一致):int cols = C[0].Count;
    • 注意先判断C是否为空,避免索引越界。
  2. 声明并填充二维数组

// 处理空列表的边界情况
if (C == null || C.Count == 0)
{
    string[,] D = new string[0, 0];
    // 后续逻辑...
    return;
}

int rows = C.Count;
int cols = C[0].Count;

// 可选:校验所有子列表长度一致,避免转换出错
foreach (var subList in C)
{
    if (subList.Count != cols)
    {
        throw new InvalidOperationException("所有子列表的长度必须相同");
    }
}

// 初始化二维数组
string[,] D = new string[rows, cols];

// 遍历嵌套列表完成赋值
for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        D[i, j] = C[i][j];
    }
}

说明

  • 边界处理:先判断C是否为空,防止访问C[0]时出现空引用异常
  • 可选校验:如果业务场景中子列表长度可能不一致,添加校验逻辑可以提前发现问题
  • 赋值逻辑:通过双重循环逐个将嵌套列表的元素映射到二维数组的对应位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:10:20