【问题标题】:What is the rationale behind GetUpperBound() in C#? [duplicate]C# 中 GetUpperBound() 背后的基本原理是什么? [复制]
【发布时间】:2018-02-09 08:06:03
【问题描述】:

我正在学习 C#,并且具有 Java + Python + D 背景。我习惯于通过以下代码(在 Java 中)将数组从零迭代到其上限:

for(int i = 0; i < array.length; i++)

但是 C#,对于多维数组,我无法获取单个维度的长度——多维数组上的 .Length 获取可用元素的总数。锯齿状数组可能是一个例外,但它们不是我正在使用的。为了得到一个特定的维度,我不得不使用 .GetUpperBound(...) ,它返回数组的长度减一。

在我得出任何结论之前,是否有理由这样做,并与至少可以追溯到 1972 年的 C 风格编程语言趋势相抗衡?除了 .GetUpperBound(...) - 1 之外,还有没有简单的方法来获得该值?我觉得很乱。

谢谢!

【问题讨论】:

  • 你有在Java中访问多维数组的类似例子吗?
  • 我可以看到一些重叠,但这并不能解决我的问题的全部范围——是否可以快速获得维度的长度?
  • 我不确定我是否理解这个问题,但这有帮助吗? stackoverflow.com/questions/2893297/…
  • @Damien_The_Unbeliever 或多或少是一样的;在 Java 中,所有数组都可能是锯齿状数组。因此,它类似于第一个维度的array.length,第二个维度的array[0].length,第三个维度的array[0][0].length,等等。
  • @DragandDrop 这看起来像我要找的东西,谢谢!你能把它写成答案而不是评论,这样我就可以接受了吗?

标签: c# arrays multidimensional-array count


【解决方案1】:

对于多维数组,我无法获取单个维度的长度-- .Length 在多维数组上获取可用元素的总数

这是有道理的,因为多维数组实际上只是一个连续的内存块。返回 Length 作为数组的实际总长度似乎是有意义的。

GetUpperBound 和GetLowerBound 如果您想知道该数组的实际尺寸,或者知道数组是否以1 开头而不是0 开头,则很方便。在这种情况下,迭代项目 0..Length-1 并不能解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 2012-11-26
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多