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

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

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

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

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

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

创建具有指定下限的指定Type和dimension长度的多维数组。

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

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

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

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

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

即GetUpperBound = GetLength – 1

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

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

我意识到这是一个老问题,但我认为值得强调的是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); 

但是,GetUpperBound()函数将输出3,因为第一个维度的上边界为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]); }