NullReferenceException не обрабатывалось в маленьком цикле
Здравствуйте, я получаю сообщение об ошибке "nullreferenceexception is unhandled" при попытке запустить этот код:
For i As Integer = 1 To aantaltags
csvopc(i) = csvtagssplit(17 * i)
csvsql(i) = csvtagssplit(17 * i + 15)
Next
Справочная информация: я читаю CSV-файл, который я очищаю и делю на csvtagssplit ()
csvopc и csvsql оба объявлены как string() в верхней части программы.
что-нибудь тупое я сделал и не заметил?
скопируйте его, если хотите: code: http://pastebin.com/JDPa6FSB csv: http://pastebin.com/2e66i9EB
2 ответа
Ваша проблема в начальной части вашего кода, где вы объявляете две переменные cvsopc
а также cvssql
,
Как из вашего комментария вы пишете
Dim csvopc As String()
Dim csvsql As String()
Но это только объявляет две переменные без какого-либо измерения.
Поэтому, когда вы пытаетесь достичь csvopc(i), вы фактически ссылаетесь на несуществующий индекс
Зачем использовать массивы, если вы не знаете точный размер ваших элементов? Вы можете легко переключиться на List(Of String)
где вы можете динамически добавлять элементы
Dim csvopc As List(Of String) = new List(Of String)
Dim csvsql As List(Of String) = new List(Of String)
а затем в вашей петле
For i As Integer = 0 To aantaltags - 1
csvopc.Add(csvtagssplit(17 * i))
csvsql.Add(csvtagssplit(17 * i + 15))
Next
List(Of String) также может указываться индексом, как в
Dim aValue = csvopc(0)
Вам следует пройтись по коду с помощью отладчика, чтобы проверить данные во время выполнения кода. Вы можете установить точку останова в месте, где все должно быть инициализировано, но до того, как произойдет исключение, а затем посмотреть, каковы значения.
Какая итерация цикла терпит неудачу, и какая строка конкретно терпит неудачу? Поместите точку останова в эту строку и посмотрите, какие значения находятся непосредственно перед выполнением строки. Если эта отладка не выдает ошибку, обновите ваш пост данными, которые вы нашли во время отладки, и, возможно, мы сможем что-нибудь найти.