array.GetLength(0)和array.GetUpperBound(0)之间的区别

时间:2011-08-26 09:15:45

标签: c# arrays multidimensional-array

这两种方法之间的区别是什么?你何时使用一种而不是另一种?

int[,] array = new int[4,3];
int length0 = array.GetLength(0);
int upperbound0 = array.GetUpperBound(0);

MSDN说GetLength返回GetUpperBound确定最大索引的元素数量,但是由于数组是用每个索引的元素初始化的,所以这有什么不同呢?

6 个答案:

答案 0 :(得分:36)

看看这个(很少使用的)方法。来自Docs

  

public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds)

     

使用指定的下限创建指定类型和尺寸长度的多维数组。

有了它,您可以创建一个索引为-5 ... +5的数组。如果您曾使用过这种数组,那么GetUpperBound()突然变得比GetLength()-1更有用。还存在GetLowerBound()

但是对这种数组的C#支持很低,你不能使用[]。您只需要将这些方法与Array.GetValue()和SetValue()方法结合使用。

答案 1 :(得分:7)

Array.Length返回所需数组的长度(元素数) 从中减去1得到UpperBound。

Array.GetUpperBound(0)返回数组的上限,您可以使用它 原样。

答案 2 :(得分:2)

GetUpperBound返回数组中的最高索引,GetLength返回数组元素的数量。

即。 GetUpperBound = GetLength - 1

答案 3 :(得分:1)

通常,array.GetUpperBound(0) = array.Length - 1,但由于我们可以创建具有非零下限的数组,因此并非总是如此。

答案 4 :(得分:1)

我意识到这是一个古老的问题,但我认为值得强调的是GetUpperBound返回指定维的上限。这对于多维数组很重要,因为在这种情况下,这两个函数不相等。

// Given a simple two dimensional array
private static readonly int[,] USHolidays =
{
    { 1, 1 },
    { 7, 4 },
    { 12, 24 },
    { 12, 25 }
};

Length属性将输出8,因为数组中有8个元素。

Console.WriteLine(USHolidays.Length);

但是,由于第一维的上边界是3,GetUpperBound()函数将输出3。换句话说,我可以遍历数组索引0、1、2和3。

Console.WriteLine(USHolidays.GetUpperBound(0));
for (var i = 0; i <= USHolidays.GetUpperBound(0); i++)
{
    Console.WriteLine("{0}, {1}", USHolidays[i, 0], USHolidays[i, 1]);
}

答案 5 :(得分:0)

如果你的数组的下限为0,那么你可以使用其中任何一个而不会产生任何混淆,但我会推荐使用array.length-1,因为它被广泛使用。但是,如果数组的下限小于0,那么你应该使用array.GetUpperBound(0),因为在这种情况下array.length-1!= array.getUpperBound(0)