繁体   English   中英

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

[英]How to cast object[] to double[][] in C#

我有类似的东西

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

我想将其转换为double[][] 我尝试(double[][])aa.Cast<double[][]>()但它没有用

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

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

解释:

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

请注意,这将

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

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

另一种方法是使用Array.ConvertAll方法,它采用回调 function 为给定数组中的每个元素调用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM