Несоответствие типа: «UBound»

Почему я получаю эту ошибку;

Type mismatch: 'UBound'

Function JumbleArray(ByVal aArray)
    Dim iUpper, iLower, iLoop, iSwapPos, varTmp
    iUpper = UBound(aArray)
    iLower = LBound(aArray)

    Randomize Timer
    For iLoop = iLower To iUpper
        iSwapPos = Int(Rnd * (iUpper + 1))

        varTmp = aArray(iLoop)
        aArray(iLoop) = aArray(iSwapPos)
        aArray(iSwapPos) = varTmp
    Next

    JumbleArray = aArray
End Function

Dim strTestArray
strTestArray = "1,2,3,4,5,6,7,8"

Shuffle = JumbleArray(strTestArray)

Этот код был предложен в другом месте, но без каких-либо сообщений о том, что он не работает. Вроде должно работать, но не работает.

Показанный здесь код — это все, что вам нужно. Просто запустив код, вы увидите ошибку.

Функции ожидают массив. Вы передаете строку.

GSerg 21.07.2019 14:17

Массив собирается из выбора флажков, так как же он может быть чем-то другим?

WilliamK 21.07.2019 14:56

@WilliamK покажите нам реальный код, а не то, в чем, по вашему мнению, проблема.

user692942 21.07.2019 15:43

Возможный дубликат Массив из Request.Form в классическом asp.

user692942 21.07.2019 15:49

Это настоящий код. Но если вы имеете в виду результат отправки формы для создания массива, то массив точно такой, как определено здесь. Попробуйте код выше, и вы получите ту же ошибку.

WilliamK 21.07.2019 15:50

@WilliamK вы получаете ту же ошибку, но не обязательно по той же причине. Мы уже показали вам, как избежать этой ошибки с помощью Split() и IsArray() для строки в вашем примере, но из того, что вы сказали, это не то, что вы на самом деле передаете.

user692942 21.07.2019 15:54

Я вижу, что вы также пометили другой пост как возможный дубликат. Ну, Сплит не решает этот случай. Вопрос простой и лаконичный... решение пожалуйста?

WilliamK 21.07.2019 15:56

strTestArray = "100002, 100003, 100001, 100000"

WilliamK 21.07.2019 15:59

Другого пути нет, и SPLIT ничего не делает, а IsArray терпит неудачу!

WilliamK 21.07.2019 16:00

@WilliamK вы не можете вернуть массив в Response.Write() без предварительного преобразования его в строку либо путем вызова Join(), либо путем повторения элементов в массиве с использованием цикла.

user692942 21.07.2019 16:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
603
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вопрос не очень ясен, но из того, что я вижу, есть две основные проблемы.

  1. Функция UBound() ожидает, что допустимый массив вернет верхнюю границу, все остальное приведет к возникновению ошибки Type mismatch.

    Проблема здесь в том, что функция ожидает Array, но ей передается String(как указано в комментариях). Если строка содержит допустимый массив строк (строка, которую можно интерпретировать через разделители как одномерный массив), вы можете использовать функцию Split() для перевода строки в допустимый массив и IsArray() для проверки возврата действительного массива.

  2. Функция JumbleArray() возвращает Array, который нельзя просто вывести на страницу с помощью Response.Write(). Чтобы вывести его, вам сначала нужно проверить его допустимый массив, используя IsArray(), а затем либо использовать Join() для вывода значений, либо перебрать каждый элемент в массиве, используя цикл.

При вызове функции попробуйте это;

strTestArray = "1,2,3,4,5,6,7,8"
Dim TestArray: TestArray = Split(strTestArray, ",")
If IsArray(TestArray) Then
  TestArray = JumbleArray(TestArray)
  If IsArray(TestArray) Then
    Call Response.Write(Join(TestArray, ","))
  End If
Else
  Call Response.Write("Not a valid array")
End If

Другие вопросы по теме