如何在C#中将object[]转换为double[][]

3

我有类似的东西

var a = new object[2]
{
     new double[1] { 0.5 },
     new double[1] { 0.5 }
}

我想将它转换为double[][]

我尝试过(double[][])aa.Cast<double[][]>(),但都不起作用。


不过,它并不是这两种情况之一。举个例子,你可以写 a[0] = "Hello";,这样做是完全有效的。 - Jon Skeet
当你确定它是double[][]类型时,为什么一开始不是这种类型呢? - Ralf
@Ralf 因为我从外部 API 获取结果,它只能传递对象给我。 - Vitali Dzikavitski
2个回答

6

你尝试使用 a.Cast<double[][]>()几乎 正确的。你可以使用以下代码:

double[][] b = a.Cast<double[]>().ToArray();

解释:

  • 问题在于你的列表元素是double[],但它们被静态地定义为object。要更改列表元素的静态类型,可以使用LINQ的Cast<T>
  • Cast<T>元素的类型作为T,而不是结果列表的类型(这就是为什么尝试使用Cast<double[][]>失败的原因)。Cast<double[]>会产生一个IEnumerable<double[]>
  • 要将此IEnumerable<double[]>转换为double[]数组(即double[][]),可以使用LINQ的ToArray()

请注意,这将

创建一个新的外部数组(即,object.ReferenceEquals(a, b)为false),但是新的外部数组将引用相同的内部数组(即,object.ReferenceEquals(a[0], b[0])为true)。

2

您可以使用LINQ double[][] b = a.Select(x => (double[])x).ToArray();

另一种方法是使用Array.ConvertAll方法,它接受一个回调函数,该函数对给定数组中的每个元素进行调用。

double[][] b = Array.ConvertAll(a, x => (double[])x);

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