无法从双[] []转换为加倍[*,*]

问题描述:

我有一个看起来像(或多或少)代码:无法从双[] []转换为加倍[*,*]

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 [] []”,因为它是由外部库提供的。

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

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

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

+0

CodeInChaos中风再次;-)总是精确和相关的记忆问题。 Thanx – 2011-02-10 10:19:33

很简单,[,]数组(二维数组)和[][]数组(锯齿阵列)是不一样的。

A [,]数组可以在视觉上用矩形表示(因此它也被称为矩形数组),而[][]数组是包含其他1D数组的一维数组。

将一个施放到另一个没有多大意义。

一个叫做multidimensional arraydouble[*,*]),另一个叫做jagged arraydouble[][])。

这是一个很好的讨论他们之间的差异。

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

+0

不错的职位确实... – 2011-02-10 10:24:36

你应该定义你的双阵列像这样:

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

那么它应该工作!

hth

+0

Thanx。这不是我的观点,因为代码只是一个例子,我不得不实际使用一组数组 – 2011-02-10 10:21:36