C# 尽管使用GetLength检查,多维数组上的IndexOutOfRangeException
我使用以下代码从Excel电子表格中读取值: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)) {
// 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是失败的迭代
的值为4lastPassRow
的值也是四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语句中有错误。我会尝试确认这是一个独立的问题,只要是这样,我会回来接受这个。太棒了!