elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  en el CLR, por que?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: en el CLR, por que?  (Leído 1,460 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: en el CLR, por que?
« Respuesta #10 en: 31 Marzo 2017, 15:37 »

da 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
  1. 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
  1. For i As Integer = 0 To arr.Length  ' 0 To 5
  2.    Console.WriteLine(arr(i))
  3. Next

Por eso se le debe descontar 1 al valor que devuelve la propiedad Count / Length:
Código
  1. For i As Integer = 0 To (arr.Length - 1) ' 0 To (5 - 1)
  2.    Console.WriteLine(arr(i))
  3. 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
  1. For i As Integer = 0 To (arr.Length - 1) Step 1 ' 0 To (5 - 1) Increment 1
  2.    Console.WriteLine(arr(i))
  3. Next



pero 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!


« Última modificación: 31 Marzo 2017, 16:11 por Eleкtro » En línea


Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines