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); }
转换为二维数组的步骤
确定数组尺寸
- 行数对应
C的元素个数:int rows = C.Count; - 列数对应子列表的元素个数(取第一个子列表的长度,需确保所有子列表长度一致):
int cols = C[0].Count; - 注意先判断
C是否为空,避免索引越界。
- 行数对应
声明并填充二维数组
// 处理空列表的边界情况 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
相关产品推荐
相关产品推荐

