2011-08-26 45 views
17

¿Cuál es la diferencia entre estos dos métodos y cuándo usaría uno en lugar del otro?Diferencia entre array.GetLength (0) y array.GetUpperBound (0)

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

MSDN dice que GetLength devuelven el número de elementos en los que GetUpperBound determinar el índice máximo, pero ¿Cómo puede ser diferente, ya que las matrices se inicializan con elementos para cada índice?

+4

Asume que el límite inferior es siempre cero. No lo es. –

Respuesta

31

Echa un vistazo a este método (muy poco frecuente). De MSDN:

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

crea una matriz multidimensional de las longitudes tipo y las dimensiones especificadas, con los límites inferiores especificados.

Con él, puede crear una matriz con índices de -5 ... +5. Si alguna vez utiliza este tipo de matriz, entonces GetUpperBound() de repente se vuelve mucho más útil que GetLength()-1. También existe un GetLowerBound().

Pero el soporte C# para este tipo de matrices es bajo, solo necesitaría esos métodos en combinación con los métodos Array.GetValue()/SetValue().

+1

"pero por favor no hagas eso". ¿Por qué no, si está seguro de los límites de su matriz? – Epiplon

+2

Solo usaría eso cuando no esté seguro de los límites. –

7

Array.Length devuelve la longitud de la matriz (número de elementos) que necesita para restar 1 de ella para obtener el UpperBound.

Array.GetUpperBound(0) devuelve el límite superior de la matriz, puede usarlo como .

2

GetUpperBound devuelve el índice más alto en la matriz, GetLength devuelve la cantidad de elementos de la matriz.

decir GetUpperBound = GetLength - 1

+3

por lo general. Pero no es por eso que se proporciona. –

+0

+1 a su respuesta, ¡no sabía que podía iniciar una matriz en un índice distinto de 0! –

1

Generalmente, array.GetUpperBound(0) = array.Length - 1, pero como podemos crear matrices que tienen un límite inferior distinto de cero, eso no siempre es cierto.

0

si el límite inferior de su matriz es 0, puede utilizar cualquiera de ellos sin confusión, pero recomendaría array.length-1, ya que es ampliamente utilizado. sin embargo, si el límite inferior de su matriz es menor que 0, entonces debe usar array.GetUpperBound (0) porque en este caso array.length-1! = array.getUpperBound (0)

Cuestiones relacionadas