如何初始化存储二维数组的List<>?对应正确写法或适配数据结构是什么
问题解决方案
方案1:保留现有List<int[,]>数据结构
你的原始写法报错是因为集合初始化器内的{1, 2}这类内容无法被编译器自动识别为int[,]类型的元素,需要显式声明每个二维数组元素,正确初始化代码如下:
List<int[,]> table = new List<int[,]> { new int[,] { { 1, 2 } }, new int[,] { { 3, 4 } }, new int[,] { { 5, 6 } }, new int[,] { { 7, 8 } } };
该写法能正常运行,但访问元素时需要用table[0][0, 0]、table[0][0, 1]的格式取到二元组内的两个数值,不符合你直接获取完整元组的调用需求。
方案2:更适配需求的优化数据结构
如果要实现table[0]直接拿到完整二元组的效果,推荐两种改动量极小、可以最大程度保留你现有数据格式的实现:
- 选择A:值元组(C# 7.0及以上版本支持,优先推荐)
List<(int, int)> table = new List<(int, int)> { (1, 2), (3, 4), (5, 6), (7, 8) };
调用时table[0]直接返回第一个二元组,可通过table[0].Item1、table[0].Item2读取内部数值,也可以在声明时自定义字段名,比如List<(int SerialNo, int Value)>,后续可以用table[0].SerialNo的方式更直观的取值。
- 选择B:一维数组列表
如果不想使用元组结构,也可以把二维数组替换为一维数组,初始化格式和你原来的写法高度一致:
List<int[]> table = new List<int[]> { new int[] { 1, 2 }, new int[] { 3, 4 }, new int[] { 5, 6 }, new int[] { 7, 8 } };
调用时用table[0][0]、table[0][1]即可读取对应数值,下标比二维数组更简洁。
内容的提问来源于stack exchange,提问作者Level 42
相关产品推荐
相关产品推荐

