12

谁能告诉这两个功能是做什么的?他们采用一个整数参数,该参数被告知为维度。但是这个整数的值是如何改变输出的呢?

下面是我跑的一个例子。

int[, ,] intMyArr = {{{ 7, 1, 3, 4 }, { 2, 9, 6, 5 } }, { { 7, 1, 3, 4 }, { 2, 9, 6, 5 }}};
Console.WriteLine(intMyArr.GetUpperBound(0));       // Output is 1
Console.WriteLine(intMyArr.GetUpperBound(1));       // Output is 1
Console.WriteLine(intMyArr.GetUpperBound(2));       // Output is 3

Console.WriteLine(intMyArr.GetLowerBound(0));       // Output is 0
Console.WriteLine(intMyArr.GetLowerBound(1));       // Output is 0
Console.WriteLine(intMyArr.GetLowerBound(2));       // Output is 0

知道为什么 GetLowerBound() 总是返回 0 吗?如果这总是返回 0 那么我们为什么需要调用这个方法呢?

4

3 回答 3

22

可能是一些例子让你清楚这个话题

我们GetUpperBound()用来找出给定维度的数组的上限,如下所示:

  int[,,] A = new int[7, 9, 11];
  // Returns 6: 0th dimension has 7 items, and so upper bound is 7 - 1 = 6;
  int upper0 = A.GetUpperBound(0); 
  // Returns 8: 0th dimension has 7 items, 1st - 9 and so upper bound is 9 - 1 = 8;
  int upper1 = A.GetUpperBound(1); 
  // Returns 10: 0th dimension has 7 items, 1st - 9, 2nd - 11 and so upper bound is 11 - 1 = 10;
  int upper2 = A.GetUpperBound(2); 

通常,GetLowerBound()返回0,因为默认情况下数组是从零开始的,但在极少数情况下它们不是:

  // A is [17..21] array: 5 items starting from 17
  Array A = Array.CreateInstance(typeof(int), new int[] { 5 }, new int[] { 17 });
  // Returns 17
  int lower = A.GetLowerBound(0); 
  // Returns 21
  int upper = A.GetUpperBound(0); 

GetLowerBound使用和的典型循环GetUpperBound

  int[] A = ...

  for(int i = A.GetLowerBound(0); i <= A.GetUpperBound(0); ++i) {
    int item = A[i];
    ...
  }

  // ... or multidimension

  int[,,] A = ...;

  for (int i = A.GetLowerBound(0); i <= A.GetUpperBound(0); ++i)
    for (int j = A.GetLowerBound(1); j <= A.GetUpperBound(1); ++j)
      for (int k = A.GetLowerBound(2); k <= A.GetUpperBound(2); ++k) {
        int item = A[i, j, k];
        ...
      }
于 2013-06-28T06:24:32.493 回答
7

GetUpper/LowerBound()指定维度的整数参数。

一些例子:

// One-dimensional array
var oneD = new object[5];
Console.WriteLine("Dimension 0 Lower bound: {0}", oneD.GetLowerBound(0)) // Outputs "Dimension 0 Lower bound: 0"
Console.WriteLine("Dimension 0 Upper bound: {0}", oneD.GetUpperBound(0)) // Outputs "Dimension 0 Upper bound: 4"

// Two-dimensional array
var twoD = new object[5,10];
Console.WriteLine("Dimension 0 Lower bound: {0}", twoD.GetLowerBound(0)) // Outputs "Lower bound: 0"
Console.WriteLine("Dimension 0 Upper bound: {0}", twoD.GetUpperBound(0)) // Outputs "Upper bound: 4"
Console.WriteLine("Dimension 1 Lower bound: {0}", twoD.GetLowerBound(1)) // Outputs "Lower bound: 0"
Console.WriteLine("Dimension 1 Upper bound: {0}", twoD.GetUpperBound(1)) // Outputs "Upper bound: 9"

虽然在 C# 中定义的数组具有下限 = 0 和上限 = 长度 - 1,但来自其他来源(例如 COM 互操作)的数组可以具有不同的边界,因此使用 Excel 互操作的人会熟悉具有下限 = 的数组1、上限=长度。

于 2013-06-28T06:09:22.260 回答
2

谁能告诉这两个功能是做什么的?

它写在他们的 MSDN 页面中。他们获取数组中指定维度的第一个/最后一个元素的索引。看看Array.GetUpperBoundArray.GetLowerBound

他们采用一个整数参数,该参数被告知为维度。

是的,正如 Patashu提到的,数组可以有multidimension

知道为什么 GetLowerBound() 总是返回 0 吗?如果这总是返回 0 那么我们为什么需要调用这个方法呢?

在数组中,每个维度都可以有其特定的下限和上限。因此,这种方法可以为数组的每个维度创建不同的结果。

请注意,尽管 .NET Framework 中的大多数数组都是从零开始的(即,该 GetLowerBound 方法为数组的每个维度返回零),但 .NET Framework 确实支持不从零开始的数组。这样的数组可以用 CreateInstance(Type, Int32\[\], Int32\[\])方法创建,也可以从非托管代码中返回。

查看;

于 2013-06-28T06:10:39.883 回答