我使用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]条目。他们的目标并没有显示出来。
答案 0 :(得分:6)
CLR支持基于非零的数组。它们令人困惑,无法避免。我相信,COM interop marshaller可以创建它们。
http://msdn.microsoft.com/en-us/magazine/cc301755.aspx
通用语言规范(CLS)合规性要求全部 数组从零开始。这允许用C#编写的方法来创建 数组并将数组的引用传递给另一个编写的代码 语言,如VisualBasic®。另外,由于基于零的数组 是迄今为止最常见的,微软花了很多时间 优化他们的表现。但是,CLR确实支持 基于非零的数组但不鼓励它们。对于那些你的人 我不会关心性能和跨语言的可移植性 演示如何在此后创建和使用非零数组 部分。
这是我第一次在真实世界的代码中看到过。
显然,多维数组具有相同的类型,无论它们是否为零。单维的有不同的类型。有道理,因为如果它们具有相同的类型,JIT总是必须为一般情况生成慢速代码。