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

C#无需循环展平二维数组并获取第二维:如何指定维度?

解决二维Object数组提取第二维度元素为一维String数组的问题

你原来的代码里用Enumerable.SelectMany(objArray, 2)是行不通的,因为SelectMany并没有接受维度索引的重载方法,而且二维数组[,]本身也不是IEnumerable<IEnumerable<object>>类型,没法直接用LINQ的展平方法来指定维度。

根据你的需求,我猜你是想提取二维数组中第二列(也就是第二维度的索引为1,因为C#是0基索引)的所有元素,并转换成一维string数组?如果是这样的话,可以用下面的代码实现:

object[,] objArray = MySQLConn.MyRecordSet.GetRows();
string[] newArray = Enumerable.Range(0, objArray.GetLength(0))
                              .Select(rowIndex => Convert.ToString(objArray[rowIndex, 1]))
                              .ToArray();

代码细节解释:

  • objArray.GetLength(0):获取二维数组的行数(第一维度的长度)
  • Enumerable.Range(0, ...):生成从0到行数-1的所有行索引,方便遍历每一行
  • Select(rowIndex => ...):遍历每个行索引,取出该行第二列(索引1)的元素,并用Convert.ToString()将其转为string类型
  • ToArray():最终将遍历结果转为目标一维string数组

如果你的需求是把整个二维数组按第二维度展平(也就是把所有行的所有元素都合并成一个一维数组),那可以先把二维数组转换成行的集合,再用SelectMany展平:

object[,] objArray = MySQLConn.MyRecordSet.GetRows();
string[] newArray = Enumerable.Range(0, objArray.GetLength(0))
                              .Select(row => Enumerable.Range(0, objArray.GetLength(1))
                                                      .Select(col => Convert.ToString(objArray[row, col])))
                              .SelectMany(x => x)
                              .ToArray();

不过看你的描述,第一种情况应该更符合你的实际需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:40