2011-08-26 43 views
17

之间的区别这两种方法之间的区别是什么?什么时候使用一个而不是另一个?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确定最大索引的数量,但是怎么会这样,因为不同的阵列与每个索引元素初始化?

+4

你假设下界总是零。不是这样。 –

回答

31

看看这个(很少使用)方法。从MSDN

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

创建指定类型和维数长度的多维数组,与指定的下限。

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

但是这种数组的C#支持率很低,您只需要将这些方法与Array.GetValue()/ SetValue()方法结合使用。

+1

“但请不要这样做。”为什么不,如果你确定你的阵列的边界? – Epiplon

+2

我只会在我不确定边界时使用它。 –

7

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

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

2

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

即GetUpperBound =对GetLength - 1

+3

通常。但这不是它提供的原因。 –

+0

+1给你的答案,不知道你可以在0以外的索引处启动一个数组! –

1

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

0

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

相关问题