基于非零的多维数组

时间:2014-05-27 15:26:29

标签: c# excel multidimensional-array com interop

我使用Interopt.Excel API从电子表格中提取单元格。我打电话的时候:

object[,] rangeValues = (object[,])range.get_Value(XlRangeValueDataType.xlRangeValueDefault);

设置一个断点并检查rangeValues,我看到的元素从[1,1]" foo",[1,2]" bar"等开始。

但是,如果我string[,] test = new string[2, 2] { { "one", "two" }, { "three", "four" } };

元素从[0,0]开始。 Excel API如何使用空元素构造多维数组?我尝试添加null但你仍然有一个[0,0]条目。他们的目标并没有显示出来。

1 个答案:

答案 0 :(得分:6)

CLR支持基于非零的数组。它们令人困惑,无法避免。我相信,COM interop marshaller可以创建它们。

http://msdn.microsoft.com/en-us/magazine/cc301755.aspx

  

通用语言规范(CLS)合规性要求全部   数组从零开始。这允许用C#编写的方法来创建   数组并将数组的引用传递给另一个编写的代码   语言,如VisualBasic®。另外,由于基于零的数组   是迄今为止最常见的,微软花了很多时间   优化他们的表现。但是,CLR确实支持   基于非零的数组但不鼓励它们。对于那些你的人   我不会关心性能和跨语言的可移植性   演示如何在此后创建和使用非零数组   部分。

这是我第一次在真实世界的代码中看到过。

显然,多维数组具有相同的类型,无论它们是否为零。单维的有不同的类型。有道理,因为如果它们具有相同的类型,JIT总是必须为一般情况生成慢速代码。

enter image description here