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

Vit*_*ski 3 c# arrays casting multidimensional-array

我有类似的东西

var a = new object[2]
{
     new double[1] { 0.5 },
     new double[1] { 0.5 }
}
Run Code Online (Sandbox Code Playgroud)

我想把它投射到double[][]. 我尝试过(double[][])aa.Cast<double[][]>()但没成功

Hei*_*nzi 6

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

double[][] b = a.Cast<double[]>().ToArray();
Run Code Online (Sandbox Code Playgroud)

解释:

  • 问题是列表的元素是double[]s,但它们的静态类型为object。要更改列表元素的静态类型,可以使用 LINQ 的Cast<T>.
  • Cast<T>将元素的类型视为T,而不是结果列表的类型(这就是您尝试使用Cast<double[][]>失败的原因)。Cast<double[]>产生一个IEnumerable<double[]>.
  • 要将其转换IEnumerable<double[]>为数组double[](即 a double[][]),我们可以使用 LINQ 的ToArray().

请注意,这将

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