VB - Индекс за пределами границ?

О, боже, я ненавижу эту штуку, я пробовал миллионы способов, но не мог найти рабочий. Позволь мне объяснить:

Я тестирую каждую строку и проверяю, что первое слово будет "копировать" в порядке? После копирования слова я хочу посмотреть, будет ли следующее слово "1", третье - "<", а последнее - ">", если все эти условия заполнены, текст между "<" и ">" должен сохраняться в переменной "copy1" (даже если между ними имеется более одного слова).

Что такое мой код:

For i = 0 To lstCode.Items.Count - 1

Dim str As String = lstCode.Items.Item(i)

Dim strA() As String = Split(str)

Dim copy1 as string

Dim copy2 as string

Select Case strA(0)


Case copy


If strA(1) = "1" And strA(2) = "<" And strA(strA.Count - 1) = ">" Then

copy1 = ""

For lr As Integer = 3 To strA.Count - 2

copy1 &= (strA(lr) & " ")

Next

End if

End select

И, когда я отлаживаю его, я получаю сообщение об ошибке: Индекс находился за пределами массива... Кто-нибудь есть идея?


Есть что-то важное, что я забыл добавить, это целый код:

 Case "copy"

                    If strA(1) = "1" And strA(2) = "<" And strA(strA.Count - 1) = ">" Then
                        copy1 = ""

                        For lr As Integer = 3 To strA.Count - 2
                            copy1 &= (strA(lr) & " ")
                        Next


                    ElseIf strA(1) = "2" And strA(2) = "<" And strA(strA.Count - 1) = ">" Then
                        copy2 = ""

                        For lrs As Integer = 3 To strA.Count - 2
                            copy2 &= (strA(lrs) & " ")
                        Next



                    ElseIf strA(1) = "run" Then
                        Try
                            IO.File.Copy(copy1, copy2)
                        Catch ex As IO.IOException
                        End Try
                    End If


            End Select

Итак, все работает как прелесть: copy 1 <c:\csb.log>, copy 2 <c:\blabla.txt>, но когда приходит инструкция "run run", она дает мне ошибку...

0
источник поделиться
1 ответ

Вам нужно сменить оператора And с AndAlso.

Второе относится к оценке короткого замыкания к вашему выражению, то есть если первое выражение ложно, то второе, третье и т.д. Выражения в одной строке не оцениваются.

В вашей линии

 If strA(1) = "1" And strA(2)  = "<" And .......

когда значение "Выполнить", вы все равно оцениваете выражение strA(2) = "<" но в индексе 2 нет элемента, чтобы вы получили ошибку.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос