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

时间:2011-02-10 10:00:14

标签: c# arrays

我的代码看起来像(或多或少):

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

我在this post找到了解决方案,其中包括循环而不是尝试野蛮演员

所以我的问题是:为什么?在内存分配的幕后发生了什么,阻止了看起来似乎 - 至少乍一看,是一个可行的演员?我的意思是在结构上,这两种表达方式似乎都很相似。我在这里失踪的是什么?

编辑: 我必须使用“double [] []”,因为它是由外部库提供的。

4 个答案:

答案 0 :(得分:10)

一个是锯齿状阵列,另一个是大块。

double[][]是一个包含double数组的数组。它的形状不一定是矩形的。用c表示它类似于double**

double[,]只是一大块内存,它总是矩形的。用c表示,它只是一个双*,您使用myArray[x+y*width]来访问元素。

答案 1 :(得分:6)

一个称为multidimensional arraydouble[*,*]),另一个称为jagged arraydouble[][])。

以下是对它们之间差异的良好讨论。

What is differences between Multidimensional array and Array of Arrays in C#?

答案 2 :(得分:2)

很简单,[,]数组(2D数组)和[][]数组(锯齿状数组)不一样。

[,]数组可以用矩形直观地表示(因此它也称为矩形数组),而[][]数组是包含其他1D数组的1D数组。

能够将一个人投射到另一个人身上没有多大意义。

答案 3 :(得分:0)

您应该像这样定义双数组:

double[,] WageLossPerVacationDay  = new double[3, 5];

然后它应该工作!

HTH