我的代码看起来像(或多或少):
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 [] []”,因为它是由外部库提供的。
答案 0 :(得分:10)
一个是锯齿状阵列,另一个是大块。
double[][]
是一个包含double数组的数组。它的形状不一定是矩形的。用c表示它类似于double**
double[,]
只是一大块内存,它总是矩形的。用c表示,它只是一个双*,您使用myArray[x+y*width]
来访问元素。
答案 1 :(得分:6)
一个称为multidimensional array(double[*,*]
),另一个称为jagged array(double[][]
)。
以下是对它们之间差异的良好讨论。
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