在LINQ中选择多维数组

16

我有一个任务,需要将一个DataTable翻译为二维数组。只需要通过循环遍历行和列即可轻松实现(参见下面的示例)。

private static string[,] ToArray(DataTable table)
{
    var array = new string[table.Rows.Count,table.Columns.Count];

    for (int i = 0; i < table.Rows.Count; ++i)
        for (int j = 0; j < table.Columns.Count; ++j)
            array[i, j] = table.Rows[i][j].ToString();

    return array;
}
我真正想做的是使用LINQ中的select语句生成那个二维数组。不过,很遗憾看起来在LINQ中没有一种选择多维数组的方法。是的,我知道可以使用LINQ来选择锯齿数组,但那不是我想要的。我的假设正确吗?还是有办法使用LINQ选择多维数组?

你能否使用数组的数组呢?(这样转换速度会更快) - Matthew Whited
是的,我可以使用不规则数组(数组的数组),但不幸的是,在这种情况下,我所调用的 API 并不接受这种类型的数据。 - mckhendry
1个回答

15

我认为这是不可能的。我的理由是Select和大多数其他LINQ函数要求它们要处理的集合至少实现了IEnumerable<T>,其中T是某种类型:

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, TResult> selector
)

矩形数组不为任何T实现IEnumerable<T>,因此它不能成为Select函数的返回值。


2
是的,使用LINQ获取一个锯齿数组很容易,但真正的二维数组则完全不同。 - Anthony Pegram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接