en el CLR, por que?

Iniciado por PETTETE, 31 Marzo 2017, 08:03 AM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

#10
Cita de: PETTETE en 31 Marzo 2017, 08:03 AMda error en el CLR, por que?

El tipo de error que recibirías en este caso, System.IndexOutOfRangeException y el mensaje de error que lo acompaña, "Índice fuera de los límites de la matriz" son lo suficientemente auto-descriptivos para hacerte una idea de lo que ocurre.




El índice de un Array en la programación .NET empieza por el número Cero, y la propiedad Count / Length devuelve el número de elementos en un Array.

Lo explicaré de otra forma:
Si tu añades cinco elementos a un array, el margen numérico que podrás utilizar en el indexer de ese array será desde el 0 hasta el 4:
Ejemplo:
Código (vbnet) [Seleccionar]
Dim arr As Object() = {item1, item2, item3, item4, item5}
Es decir que puedes usar desde arr(0) hasta arr(4).

Cuando llamas a la propiedad arr.Count / arr.Length, ésta devolverá la cantidad de elementos del array, es decir un valor de 5, puesto que el array contiene 5 elementos;
Entonces, al intentar iterar los elementos de la siguiente manera, estarías intentando acceder al índice arr(5), el cual no existe, y por lo tanto lanzaría un error:
Código (vbnet) [Seleccionar]
For i As Integer = 0 To arr.Length  ' 0 To 5
   Console.WriteLine(arr(i))
Next


Por eso se le debe descontar 1 al valor que devuelve la propiedad Count / Length:
Código (vbnet) [Seleccionar]
For i As Integer = 0 To (arr.Length - 1) ' 0 To (5 - 1)
   Console.WriteLine(arr(i))
Next


Lo mismo se aplicaría al ejemplo que pusiste de un búcle con la incrementación de la instrucción Step:
Código (vbnet) [Seleccionar]
For i As Integer = 0 To (arr.Length - 1) Step 1 ' 0 To (5 - 1) Increment 1
   Console.WriteLine(arr(i))
Next





Cita de: PETTETE en 31 Marzo 2017, 13:52 PMpero por eso se pone el -1? para que no salga del limite?
y que no llegue al 5 sino que se quede en el 4????

Exacto. Puesto que el índice de un array empieza por 0, la propiedad Count / Length siempre devolverá un valor mayor (un 1 más) puesto que lo que hace es contrar la cantidad de elementos del array, así que si un array contiene 1 elementos, Count / Length devolverá el valor "1", no "0"... evidéntemente.

¡Saludos!