【问题标题】:C# two-dimensional array access throws IndexOutOfRangeExceptionC#二维数组访问抛出IndexOutOfRangeException
【发布时间】:2013-09-03 13:18:36
【问题描述】:

我有一个二维对象数组,我想读取它。程序总是抛出 IndexOutOfRange 异常。

代码如下:

Excel.Range range = activeWorksheet.UsedRange;
MessageBox.Show(range.Value2.GetType().toString()); // output: System.Object[,]
object[,] values = (object[,])range.Value2;
MessageBox.Show("l0="+values.GetLength(0)); // output: 1483
MessageBox.Show("l1"+values.GetLength(1)); // output: 221
MessageBox.Show(values.GetValue(0, 0).ToString()); // -> throws IndexOutOfRangeException

那里到底发生了什么?!有什么想法吗?

【问题讨论】:

  • 只是为了尝试。从索引 1,1 开始
  • Good ol' base-1 Excel :-)
  • 就是这样。我的天啊。现在我记得为什么我从来不想使用微软工具进行开发
  • 因为在决定从何处开始索引引用时存在细微差异?请注意,它在 Excel 中实际上很直观,因为工作表从 1,1 开始。我认为一旦决定是在很久以前做出的,在恐龙漫游地球之​​前,他们必须坚持下去以保持连续性。现在,如果您正在谈论使用 Excel COM 组件,那么您可能想看看 EPPlus。

标签: c# arrays excel


【解决方案1】:

Excel 使用 1 作为其维度的起始索引。一般来说,如果要搜索未知数组的第一个元素的索引:

int startXIndex = values.GetLowerBound(0); // 0 based dimension 
int startYIndex = values.GetLowerBound(1);

GetUpperBound 执行相同操作以了解最后一个索引。

更多here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多