C# 尽管使用GetLength检查,多维数组上的IndexOutOfRangeException

C# 尽管使用GetLength检查,多维数组上的IndexOutOfRangeException,c#,multidimensional-array,indexoutofrangeexception,C#,Multidimensional Array,Indexoutofrangeexception,我使用以下代码从Excel电子表格中读取值: // Start with passed int lastPassRow = sheets[passedVehicles].GetLength(0); for (int i = 1; i < lastPassRow; i++) { // Exception here if(DateTime.TryParse(sheets[passedVehicles][i, 0].ToString(), out result)) {

我使用以下代码从Excel电子表格中读取值:

// Start with passed
int lastPassRow = sheets[passedVehicles].GetLength(0);

for (int i = 1; i < lastPassRow; i++)
{
   // Exception here
   if(DateTime.TryParse(sheets[passedVehicles][i, 0].ToString(), out result))
   {
      passedDates.Add((DateTime)sheets[passedVehicles][i, 0]);
   }
}
//以已传递的
int lastPassRow=sheets[passedVehicles].GetLength(0);
对于(int i=1;i
sheets[passedVehicles]
的类型是
对象[,]
的多维数组,上面的for循环在i=1时给我一个
IndexOutOfRange
异常,尽管我检查了行数

我为有问题的电子表格添加了一些日志记录,并验证了:

  • i=1是失败的迭代
  • lastPassRow
    的值为4
  • sheets[passedVehicles].GetLength(1)
    的值也是四
对我来说,所有值似乎都在范围内。是否有其他原因可能导致此异常


注意:我从I=1开始,因为第0行是电子表格中的标题,不包含我试图读取的数据。

我怀疑是
0
超出了范围


Excel数组是基于1的,而不是您可能期望的基于0的。

这不应该是
工作表[passedVehicles][0,i]
?@Kryptos不,我一直使用
[row,column]
约定,它对除此之外的所有内容都有效。如果您评估
工作表[passedVehicles].GetLowerBound(0)
,对于
1
?Excel数组是基于1的,而不是基于0的,因此它的下限可能是
1
,而不是
0
。C#数组始终是基于0的,但是更通用的
数组
类实际上允许任意的上下限。那么试试
sheets[passedVehicles][i,1]
你完全正确。没有例外!我没有读取正确的数据,我怀疑是因为我的LINQ语句中有错误。我会尝试确认这是一个独立的问题,只要是这样,我会回来接受这个。太棒了!