none
VALIDAR (Índice fuera de los límites de la matriz) RRS feed

  • Pregunta

  • Hola tengo un error en el cual me dice lo siguiente;

    Índice fuera de los límites de la matriz

    necesito validar este error pero no se como, mi codigo es el siguiente;

        Private Sub consultaCtacte()
    
            Dim nombrecompleto As String = ""
    
    
            uncliente.rutcte = txtRut.Value
            uncliente.digcte = txtDig.Text
    
            If uncliente.Leer Then
    
                nombrecompleto = uncliente.nomcte
                Dim nombres As String() = nombrecompleto.Split(New Char() {" "})
    
                If Not IsNothing(nombres(0).Length) Then
                    TxtNombres.Text = ""
                Else
                    TxtNombres.Text = nombres(0).ToString
                End If
    
                If Not IsNothing(nombres(1).Length) Then
                    TxtApePaterno.Text = ""
                ElseIf IsDBNull(nombres(1).ToString) Then
                    TxtApePaterno.Text = ""
                Else
                    TxtApePaterno.Text = nombres(1).ToString
                End If
    
                If IsNothing(nombres(2).Length) Then
                    TxtApeMaterno.Text = ""
                Else
                    TxtApeMaterno.Text = nombres(2).ToString
                End If
    
    
    
    
            End If
    
        End Sub

    espero puedan ayudarme, gracias

    miércoles, 6 de marzo de 2019 16:45

Todas las respuestas

  • Fíjate que haces un Split y luego accedes a los valores (0), (1) y (2) del resultado del split. Si la cadena original tiene menos de tres partes, te genera un array con memos de 3 elementos. Por lo tanto en el momento en que accedas al elemento que no existe, te dice que el índice está fuera de rango.

    Y no, no vale comprobar si el elemento existe usando  If IsNothing(nombres(2).Length) Then...

    El problema es que eso primero tiene que acceder a nombres(2) y después hace el resto de las operaciones. Pero claro, si ya te ha dado un error al acceder a nombres(2) todo el resto de las comprobaciones son inútiles.

    Solución:

    If nombres.Length >=3 Then ....

    Esto comprueba si existen al menos tres elementos en el array, lo cual te garantiza que puedes acceder al (0), (1) y (2).

    miércoles, 6 de marzo de 2019 19:42