无法将double[][]转换为double[*,*]

7

我有一段代码看起来像这样(或者差不多):

public void INeedHolidaysNow(double[,]){
     //... Code to take a break from coding and fly to Hawaii
}

double[][] WageLossPerVacationDay = new  double[10][5];

INeedHolidays(WageLossPerVacationDay); // >>throws the Exception in the Title

我在这篇文章中找到了解决方法,它是通过循环来实现而不是尝试强制转换。
那么我的问题是:为什么?在内存分配的背后发生了什么,阻止了可能看起来 - 至少乍一看是可行的转换?我是说,在结构上,两个表达式似乎相当相似。我错过了什么?
编辑: 我必须使用“double[][]”,因为它是由外部库提供的。
4个回答

11

一个是锯齿数组,另一个是一个大块。

double[][] 是一个包含 double 数组的数组。它的形式不一定是矩形的。在 C 语言中类似于 double**

double[,] 只是一个大的内存块,它总是矩形的。在 C 语言中它只是一个 double*,你可以使用 myArray[x+y*width] 来访问元素。


CodeInChaos 又来了 ;-) 在内存问题上总是非常准确和相关。谢谢 - Mehdi LAMRANI

6

2

简单来说,[,] 数组(二维数组)和 [][] 数组(锯齿状数组)并不相同。

[,] 数组可以通过矩形进行可视化表示(因此也被称为矩形数组),而 [][] 数组是包含其他 1D 数组的 1D 数组。

将一个转换成另一个并没有太多意义。


1
你应该这样定义你的双重数组:
double[,] WageLossPerVacationDay  = new double[3, 5];

那么它应该可以工作了!

希望这有帮助。


谢谢。那不是我的重点,因为代码只是一个例子,实际上我必须使用一个数组的数组。 - Mehdi LAMRANI

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