C#中从二维数组赋值一维数组报错CS0022的问题咨询
为什么C#中二维数组取行会触发CS0022错误?
你遇到的CS0022错误,核心原因是C#的int[,]是多维矩形数组,和Python的二维列表结构完全不同:
- 在Python里,二维列表本质是「列表的列表」,每个子列表都是独立的一维列表,所以
twoArray[0]能直接拿到第一个子列表。 - 但C#的
int[,]是一块连续分配的内存,它没有单独的“行数组”对象,必须同时指定行索引和列索引(两个索引)才能定位到单个元素,只写一个索引twoArray[0]就会触发索引数量不匹配的错误。
解决方法
方法1:改用交错数组(数组的数组)
如果想实现类似Python的写法,应该声明交错数组int[][],它的结构就是一维数组的集合,每个元素都是独立的一维数组:
int[][] twoArray = { new int[] { 1, 2, 3 }, new int[] { 3, 2, 1 } }; int[] oneArray = twoArray[0]; // 正常赋值,拿到第一行的一维数组
方法2:从多维数组手动提取整行
如果必须使用int[,]类型的多维数组,需要手动遍历复制整行的元素:
int[,] twoArray = { { 1, 2, 3 }, { 3, 2, 1 } }; // 获取行的长度(第二维度的元素个数) int rowLength = twoArray.GetLength(1); int[] oneArray = new int[rowLength]; for (int i = 0; i < rowLength; i++) { oneArray[i] = twoArray[0, i]; // 逐个取第0行的元素 }
也可以用LINQ简化操作(需要引用System.Linq命名空间):
using System.Linq; int[,] twoArray = { { 1, 2, 3 }, { 3, 2, 1 } }; int[] oneArray = Enumerable.Range(0, twoArray.GetLength(1)) .Select(colIndex => twoArray[0, colIndex]) .ToArray();
内容的提问来源于stack exchange,提问作者avedium
相关产品推荐
相关产品推荐

